Como fazer um script invocar todos os outros scripts que correspondam a um padrão

0

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?

    
por Peter Smit 16.10.2009 / 09:25

4 respostas

2

bash internals:

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

via (gnu) find:

find . -name "fig*-gen.sh" -exec bash '{}' ';'
    
por 16.10.2009 / 10:05
1

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"

    
por 16.10.2009 / 10:05
1

Em vez de um loop, você pode usar find:

find $SCRIPT_DIR -type f -name "fig*-gen.sh" -exec {} \;
    
por 16.10.2009 / 10:09
1

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

    
por 22.08.2010 / 22:17

Tags