2 votes

Comment exécuter une séquence de bash scripts un par un sous Linux ?

J'ai plusieurs scripts bash, ou plutôt un scripts qui doit être exécuté plusieurs fois.

Ce script accepte plusieurs arguments de ligne de commande et fait quelque chose avec eux. J'ai besoin d'exécuter ce script plusieurs fois en séquence, en passant des valeurs d'arguments différentes. Le problème est que ce script est très long et qu'il prend beaucoup de temps à s'exécuter.

Je veux exécuter ce script une fois, avec quelques arguments. Puis je veux exécuter à nouveau ce script tout de suite après, en passant des valeurs d'arguments différentes cette fois.

Je dois donner mes résultats finis à mon patron le matin. Une solution serait d'exécuter le script une fois, puis de rester assis devant l'ordinateur toute la nuit, en attendant qu'il se termine, puis d'exécuter à nouveau le script. Mais le manque de sommeil n'est pas une option pour moi.

Existe-t-il un moyen d'automatiser l'exécution de scripts avec des valeurs d'arguments prédéterminées ? Au fait, j'ai besoin de voir non seulement la sortie du scripts comme résultat final, mais aussi le scripts tel qu'il a été passé dans la ligne de commande avec les arguments appropriés.

Peut-être serait-il préférable de regarder cette image pour mieux comprendre ma question.

screenshot

0 votes

Vous serez peut-être intéressé par la commande bash wait (voir man bash o help wait de bash), probablement pas nécessaire ici, mais il attendra qu'un processus/PID ou tous les enfants se terminent.

2voto

DocWeird Points 1284

La façon la plus simple d'exécuter une commande après l'autre est d'utiliser ; Par exemple :

command1 --options;command2 --options;command3 --options

Si vous souhaitez sauter des commandes si la précédente échoue, vous pouvez le faire avec && :

 command1 --options && command2 --options && command3 --options

Contrairement au tube (|) ou à l'esperluette (&), le point-virgule attend la fin de la commande avant d'exécuter la commande suivante.

0voto

John1024 Points 15663

Vous avez besoin d'un for boucle :

cd ~/Desktop/344/08
for arg in --resources --requesters --errors
do
    echo Starting: ./log_parse.sh "$arg" --day 10-20 --number 10 access_log_Jul95
    ./log_parse.sh "$arg" --day 10-20 --number 10 access_log_Jul95
done

Vous voudrez peut-être enregistrer une copie de la sortie dans un fichier journal et l'afficher sur un écran :

cd ~/Desktop/344/08
{
    for arg in --resources --requesters --errors
    do
        echo Starting: ./log_parse.sh "$arg" --day 10-20 --number 10 access_log_Jul95
        ./log_parse.sh "$arg" --day 10-20 --number 10 access_log_Jul95
    done
} 2>&1 | tee output.log

Mettez le code ci-dessus dans un fichier appelé, disons, script.sh . Puis, à l'invite de commande, exécutez :

bash ./script.sh

0voto

LawrenceC Points 70381

Vérifiez le Task Spooler ( http://vicerveza.homeunix.net/~viric/soft/ts/ ) - il existe des paquets pour Debian.

En gros, vous pouvez l'installer, puis exécuter un tas de tsc {script} {arguments} et il empilera la commande dans une file d'attente sur laquelle le spooler travaille en arrière-plan.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X