Supposons que j'ai un script qui reçoit un chemin en tant que paramètre. Comment pourrais-je exécuter tous les scripts situés dans ce chemin?
En supposant que chemin signifie chemin d'accès à un répertoire, utilisez run-parts
. De man run-parts
:
run-parts - run scripts or programs in a directory
Tout d'abord, vous devez définir l'autorisation d'exécution sur tous les scripts que vous souhaitez exécuter. Normalement, run-parts
ignorera les répertoires et les fichiers non exécutables résident dans ce répertoire.
Avant d'exécuter, vous devriez vérifier quels fichiers seront exécutés avec l'option --test
:
run-parts --test /path/to/directory
Je devrais mentionner que run-parts
a une convention de nommage stricte pour les scripts à exécuter:
If neither the --lsbsysinit option nor the --regex option is given
then the names must consist entirely of ASCII upper- and
lower-case letters, ASCII digits, ASCII underscores, and ASCII minus-hyphens.
Vérifiez man run-parts
pour avoir plus d’idées.
Les pièces d’exécution fonctionneront si vos scripts portent les noms corrects. Si vous ne souhaitez pas renommer vos scripts pour les adapter au schéma de nommage complexe de run-parts
, vous pouvez faire quelque chose d'aussi simple que
for file in ~/target/*; do $file 2>/dev/null; done
Cela tentera d'exécuter tous les fichiers (et répertoires) trouvés dans ~/target
. Le 2>/dev/null
redirige les messages d'erreur afin qu'il ne se plaint pas lors d'une tentative d'exécution de répertoires ou de fichiers non exécutables.
Alternativement, vous pouvez essayer le plus sophistiqué
for file in ~/target/*; do
[ -f "$file" ] && [ -x "$file" ] && "$file"
done
Cela vérifiera si chacun des résultats est un fichier ([ -f $file ]
), est exécutable ([ -x $file ]
) et que si ces deux tests réussissent, il tentera d'exécuter le fichier.