Je viens de poser une question sur la mise en place d'un processus pour dormir dans le fond.
La notation que j'ai trouvée me ressemble à ceci:
sleep 10 && echo "hello world" &
Cette réponse à une autre question utilise un format différent.
( sleep 10 ; echo "hello world" ) &
Je sais que cela &&
ne permet au deuxième processus de démarrer que si le premier retourne vrai. Le sommeil peut-il échouer? Y a-t-il une situation où je devrais préférer l'un à l'autre?
Réponses:
Le sommeil peut échouer s'il est interrompu pendant l'exécution:
Puisque sleep est un exécutable externe, il est également concevable que les appels fork ou exec puissent échouer, ce qui entraînerait également que bash génère un code d'erreur> 0.
la source
a; b
exécute toujours la deuxième commande après la première, alors qu'ellea && b
n'exécute la deuxième commande que si la première réussit, c'est-à-dire uniquement si la première commande renvoie l'état 0.sleep
renvoie toujours l'état 0, sauf lorsqu'il est tué par un signal, auquel cas l'état est 128 + numéro de signal. (Le statut peut également être 126 ou 127 si lasleep
commande n'existe pas ou si le programme ne peut pas démarrer en raison d'un manque de ressources, mais il est très peu probable que vous rencontriez ces cas.)Ainsi, vous devez utiliser
;
ou&&
selon ce que vous voulez arriver si le sommeil est interrompu:sleep 10; echo hello
imprime le message après 10 secondes (moins s'ilsleep
est tué par un signal);sleep 10 && echo hello
imprime le message après 10 secondes, mais n'imprime rien s'ilsleep
est tué par un signal.la source
Vous devez supposer que toute commande peut échouer pour diverses raisons, même si l'échec du sommeil est en effet très improbable.
signifie sommeil en arrière-plan et exécuter l'écho après le processus de sommeil, mais si le sommeil échoue, l'écho s'exécutera quand même voir l'explication complète
signifie que vous devez attendre la fin du sommeil avant de faire écho à quoi que ce soit et si écho échoue, le processus s'arrête mais la commande entière est également en arrière-plan. voir l'explication complète
Conclusion
la première syntaxe est le script shell ce qui signifie qu'il considère les instructions séparément comme une liste.
La deuxième option utilise && signifie ET donc si vous l'utilisez si la première commande échoue, la seconde ne sera pas exécutée.
Il s'agit simplement d'un comportement différent dans la gestion des erreurs.
la source