Мы используем эту команду , чтобы запустить все тесты с использованием мокко: mocha ./src/test/**/*.js --recursive

Обратите внимание на двойной ** . Он отлично работает на любом современном bash, кроме системы CI, которая представляет собой RedHat с GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) .

Я читал, что v3 не поддерживает двойной Globstar.

  • Я попытался включить его , выполнив shopt -s globstar
    • но не удалось сказать shopt: globstar: invalid shell option name .
  • Я попросил devops клиента обновить Bash
    • но он сказал: «это не показывает мне, что доступна новая версия bash».
  • Этот другой ответ не помог.

Вопрос: Как мне выполнить команду с ** на linux bash v3.*? Любое решение?

1 ответ1

5

Если он не поддерживает globstar, то он не поддерживает его.

Однако большую часть времени вы можете адаптировать find , xargs и / или подобные инструменты. Ваш случай довольно прост, все в одном каталоге, поэтому:

find src/test -name "*.js" -exec mocha --recursive {} +

find src/test -name "*.js" -print | xargs -d '\n' mocha --recursive

(find ставит имена файлов вместо {} , а xargs добавляет их в конец. Таким образом, в обоих случаях повторяющиеся аргументы должны идти в конце после всех опций -, но это не должно быть проблемой для большинства программ.)

В качестве альтернативы, если запуск mocha один раз для каждого файла в порядке, то:

find src/test -name "*.js" -exec mocha {} --recursive \;

Сравнить -exec … \; (по одному файлу за раз) и более ранний -exec … + (как можно больше).

Примечание: во всех приведенных выше примерах "*.js" должен быть заключен в кавычки, потому что вы хотите, чтобы find обрабатывал его, а не оболочку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .