Как использовать globstar на bash старше v4
Мы используем эту команду для запуска всех тестов с использованием mocha: 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 ответ
Если он не поддерживает globstar, то он не поддерживает его.
Тем не менее, большую часть времени вы можете адаптировать find
, xargs
и / или аналогичные инструменты. Ваш случай довольно прост, все находится в одном каталоге, поэтому:
find src/test -name "*.js" -exec mocha --recursive {} +
find src/test -name "*.js" -print | xargs -d '\n' mocha --recursive
(найти ставит имена файлов вместо {}
и xargs добавляет их в конец. Таким образом, в обоих случаях повторяющиеся аргументы должны идти в конце после всех опций -, но это не должно быть проблемой для большинства программ.)
В качестве альтернативы, если работает mocha
один раз для каждого файла все в порядке, тогда:
find src/test -name "*.js" -exec mocha {} --recursive \;
сравнить -exec … \;
(один файл за раз) и ранее -exec … +
(как можно больше).
Примечание. Во всех приведенных выше примерах "*.js"
должен быть указан, потому что вы хотите find
обрабатывать его, а не оболочку.