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
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
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
J'ai rencontré ce problème où je ne pouvais pas utiliser de boucles et que run-parts fonctionnait avec cron.
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.