web-dev-qa-db-fra.com

Exécuter tous les scripts Shell dans le dossier

J'ai plusieurs scripts .sh dans un seul dossier et j'aimerais les exécuter l'un après l'autre. Un seul script peut être exécuté en tant que:

bash wget-some_long_number.sh -H

Supposons que mon répertoire est /dat/dat1/files

Comment puis-je exécuter bash wget-some_long_number.sh -H l'un après l'autre?

Je comprends quelque chose dans cette ligne devrait fonctionner:

for i in *.sh;...do ....; done 

8
code123

Essaye ça:

for f in *.sh; do  # or wget-*.sh instead of *.sh
  bash "$f" -H   || break # if needed 
done

Si vous souhaitez exécuter, par exemple, x1.sh, x2.sh, ..., x10.sh:

for i in `seq 1 10`; do
  bash "x$i.sh" -H   || break # if needed 
done
11
Kirill Bulygin

il existe un moyen beaucoup plus simple, vous pouvez utiliser la commande run-parts qui exécutera tous les scripts du dossier: 

run-parts /path/to/folder
15
Hamza Jabbour

J'ai rencontré ce problème où je ne pouvais pas utiliser de boucles et que run-parts fonctionnait avec cron.

Réponse:

foo () {
    bash -H $1 
    #echo $1
    #cat $1
}
cd /dat/dat1/files #change directory
export -f foo #export foo
parallel foo ::: *.sh #equivalent to putting a & in between each script

Vous utilisez GNU en parallèle, cela exécute tout le répertoire, avec le buff ajouté, à une vitesse beaucoup plus rapide. Sans parler du fait que l'exécution du script ne se limite pas à cela, vous pouvez insérer n'importe quelle commande dans la fonction et cela fonctionnera.

1