Как использовать 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 обрабатывать его, а не оболочку.

Другие вопросы по тегам