Si j'exécute une commande en arrière-plan avec &
, comme ceci:
sleep 2 &
lorsque la commande se termine, je reçois "Terminé". Comment puis-je éviter de voir le message "Terminé"?
Si j'exécute une commande en arrière-plan avec &
, comme ceci:
sleep 2 &
lorsque la commande se termine, je reçois "Terminé". Comment puis-je éviter de voir le message "Terminé"?
Réponses:
Exécutez le shell intégré:
$ set +m
Cela fonctionne en désactivant le "mode moniteur" afin que le shell ne signale pas la fin des travaux en arrière-plan.
Bien que l'exécution de la commande dans un sous-shell comme:
$ (sleep 2&)
... désactivera également le message, la seule raison pour laquelle cela fonctionne est que le mode moniteur est activé par défaut uniquement pour les shells interactifs. Autrement dit, le sous-shell évite le message en exécutant un shell supplémentaire qui a un "set + m" automatique .
Je voudrais clarifier les deux réponses précédentes. Si ce que vous voulez, c'est de ne jamais voir le message Terminé à partir des commandes de votre shell, set +m
c'est la voie à suivre. Mettez-le simplement dans votre .profile et / ou .bashrc et c'est fait. Notez cependant que si vous tapez ceci:
set +m
sleep 2 &
set -m
et le sommeil se termine après la finale set -m
, vous aurez toujours le message terminé.
Si vous souhaitez désactiver le message pour un appel de commande unique, la technique de sous-shell (sleep 2 &)
est la voie à suivre.
En toute honnêteté, je ne savais que set +m
, donc +1 à Wooble pour m'avoir éclairé. Cependant, il convient de noter que celle des deux solutions que vous souhaitez dépend de ce que vous essayez de faire.
Sans sous-shell , vous pouvez effectuer les opérations suivantes:
silent_background() {
{ 2>&3 "$@"& } 3>&2 2>-
disown &>/dev/null # Close STD{OUT,ERR} for silence if job has already completed
}
silent_background sleep 5
Basé sur cette réponse .
jobs
ne montrera rien).