Как сделать скрипт для вызова всех остальных скриптов, соответствующих шаблону

0

У меня есть каталог с множеством скриптов для генерации фигур. Все сценарии соответствуют шаблону fig * -gen.sh

Я хотел бы иметь скрипт bash (с именем allfig-gen.sh) для вызова всех скриптов генерации фигур. Как я могу это сделать?

Питер Смит
источник

Ответы:

2

внутренности bash:

for s in fig*-gen.sh; do
    bash "$s";
done

через (GNU) найти:

find . -name "fig*-gen.sh" -exec bash '{}' ';'
Акира
источник
1

Если сценарии не требуют параметров или не требуют вызова в определенном порядке, вы сможете достичь этого с помощью простого цикла

#!/bin/bash

for i in $SCRIPT_DIR/fig*-gen.sh
do
  ./"$i"
done

Предостережение: чтобы это работало, fig*-gen.shфайлы должны указывать интерпретатор через #!/bin/bashстроку. Если они этого не делают, вам нужно явно вызвать интерпретатор, заменив ./"$i"что-то вродеbash ./"$i"

Нагул
источник
Кроме того, чтобы использовать, ./"$"как в вашем примере, файлы должны иметь разрешения на выполнение, в то время как при использовании bash ./"$i"они не имеют.
Деннис Уильямсон
1

Вместо цикла for вы можете использовать find:

find $SCRIPT_DIR -type f -name "fig*-gen.sh" -exec {} \;
кендырь
источник
1

Если вы хотите, чтобы они работали параллельно, и если у вас установлен GNU Parallel http: // www.gnu.org/software/parallel/, вы можете сделать это:

ls ./fig*-gen.sh | parallel

или даже это:

parallel ::: ./fig*-gen.sh

Посмотрите вступительное видео для GNU Parallel, чтобы узнать больше: http://www.youtube.com/watch?v=OpaiGYxkSuQ

Оле Танге
источник