Vous pouvez séparer plusieurs commandes en les exécutant de ;
manière séquentielle, par exemple:
really_long_script.sh ; echo Finished
Si vous souhaitez exécuter le programme suivant uniquement si le script s'est terminé avec le code retour 0 (ce qui signifie généralement qu'il s'est exécuté correctement), alors:
really_long_script.sh && echo OK
Si vous voulez le contraire (c'est-à-dire continuer uniquement si la commande actuelle a échoué), alors:
really_long_script.sh || echo FAILED
Vous pouvez exécuter votre script en arrière-plan (mais attention, la sortie des scripts ( stdout
et stderr
) continuerait à aller vers votre terminal à moins que vous ne le redirigiez quelque part), puis wait
pour cela:
really_long_script.sh &
dosomethingelse
wait; echo Finished
Si vous avez déjà exécuté le script, vous pouvez le suspendre avec Ctrl-Z
, puis exécuter quelque chose comme:
fg ; echo Finished
Où fg
amène le processus suspendu au premier plan (le bg
ferait fonctionner en arrière-plan, un peu comme au début &
)
fg
renvoie la valeur du travail qu'il reprend, vous pouvez l'utiliserfg && echo Finished
si vous voulez vous assurer que la commande réussit avant d'exécuter l'autre commande.Vous pouvez également utiliser le contrôle des tâches de bash. Si vous avez commencé
puis appuyez sur ctrl + z pour le suspendre:
pour redémarrer le travail en arrière-plan (comme si vous l'aviez démarré
really_long_script.sh &
). Ensuite, vous pouvez attendre ce travail de fond avecoù N est l'ID du travail (probablement 1 si vous n'avez exécuté aucun autre travail en arrière-plan) qui est également affiché comme
[1]
ci-dessus.la source
Si le processus ne s'exécute pas sur le terminal actuel, essayez ceci:
la source
watch
. Réponse super courte et on apprend une nouvelle façon utile d'utiliser la montreIl s'avère que ce n'est pas si difficile: vous pouvez simplement taper la commande suivante dans la fenêtre pendant que la commande existante s'exécute, appuyez sur Entrée et lorsque la première se termine, la deuxième commande s'exécute automatiquement.
Je suppose qu'il existe des moyens plus élégants, mais cela semble fonctionner.
Modification pour ajouter que si vous souhaitez exécuter une alerte une fois la commande terminée, vous pouvez créer ces alias dans .bashrc, puis exécuter
alert
pendant son exécution:la source
Il y a quelque temps, j'ai écrit un script pour attendre la fin d'un autre processus.
NOISE_CMD
pourrait être quelque chose commenotify-send ...
, étant donné qu'ilDISPLAY
est correctement défini.Sans aucun segment, faites juste du bruit immédiatement. Ce comportement permet quelque chose comme ça pour plus de commodité (disons que vous appelez le script ci-dessous
alarm.sh
):Bien sûr, vous pouvez faire beaucoup de choses drôles avec un tel script, comme laisser une instance d'
alarm.sh
attendre une instance dealarm.sh
, c'est-à-dire attendre une autre commande. Ou exécuter une commande juste après la fin de la tâche d'un autre utilisateur connecté ...>: DUne ancienne version du script ci-dessus peut être intéressante, si vous voulez éviter une dépendance
pgrep
et accepter de rechercher vous-même les ID de processus:Légèrement hors sujet, mais utile dans des situations similaires: on pourrait être intéressé par
reptyr
un outil qui "vole" un processus d'un shell (parent) et l'exécute à partir du shell actuel. J'ai essayé des implémentations similaires etreptyr
c'est la plus jolie et la plus fiable pour mes besoins.la source