npm скрипт для удаления всех файлов в каталоге, кроме файлов с определенными расширениями (ma c os) - PullRequest
0 голосов
/ 13 февраля 2020

Я знаю, что здесь много похожих вопросов, но я не нашел ответ, который искал. Вот команда, которую я пытаюсь использовать в сценарии npm.

rm -rf public/!(*.md)

Я включил расширенное глобирование с помощью команды shopt -s extglob, и команда прекрасно работает в Терминал. У меня проблема в том, что она не запускается, когда я использую ту же команду, что и скрипт npm.

The Script

"scripts": {
   // ...
   "clean:public": "rm -rf public/!(*.md)",
   //...
}

Ошибка, которую я получаю в своем терминале при запуске сценарий

> rm -rf public/!(*.md)

sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `rm -rf public/**/!(*.md)'

Возможные решения, которые не удалось ...

  1. Цитирование глобуса rm -rf 'public/!(*.md)'
    • Это избавило от ошибки, но сценарий не Не удаляйте файлы.
  2. Я также пытался заключить в кавычки глобус с помощью двойных кавычек и получил тот же результат.
  3. Я попытался убрать скобки и получил json ошибка синтаксического анализа.

В чем проблема ...

Я только что узнал, что npm сценарии запуска не используют оболочку пользователя, который запускает команду , Я не уверен, как решить эту проблему, разве что путем установки дополнительных пакетов npm? Если это так, какие пакеты я должен установить?

1 Ответ

0 голосов
/ 13 февраля 2020

Запустите ваш скрипт под bash. Как видно из сообщения об ошибке, т.е. sh:, это не bash. Если сценарий имеет для запуска в сценарии sh, sh -wrapper. Например, если ваш текущий скрипт bash (содержащий rm или что вам еще нужно сделать) - foo.sh, напишите команду как:

"clean:public": "bash /path/to/your/script/foo.sh"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...