bash internals:
for s in fig*-gen.sh; do
bash "$s";
done
via (gnu) find:
find . -name "fig*-gen.sh" -exec bash '{}' ';'
Eu tenho um diretório com muitos scripts para gerar figuras. Todos os scripts correspondem ao padrão fig * -gen.sh
Eu gostaria de ter um script bash (chamado allfig-gen.sh) para invocar todos os scripts de geração de figuras. Como posso fazer isso?
A menos que os scripts requeiram parâmetros ou precisem ser chamados em uma ordem específica, você deve conseguir isso através de um simples loop
#!/bin/bash
for i in $SCRIPT_DIR/fig*-gen.sh
do
./"$i"
done
Advertência:
Para que isso funcione, os arquivos fig*-gen.sh
devem especificar o intérprete por meio da linha #!/bin/bash
. Se não, você precisa chamar o interpretador explicitamente substituindo ./"$i"
por algo como bash ./"$i"
Em vez de um loop, você pode usar find:
find $SCRIPT_DIR -type f -name "fig*-gen.sh" -exec {} \;
Se você quer que eles sejam executados em paralelo e se você tiver o GNU Parallel http: // www.gnu.org/software/parallel/ instalado, você pode fazer isto:
ls ./fig*-gen.sh | parallel
ou até mesmo isso:
parallel ::: ./fig*-gen.sh
Assista ao vídeo de introdução do GNU Parallel para saber mais: link