bâtiment hors de la réponse de ngoozeff
, si vous souhaitez effectuer une commande à exécuter complètement en arrière-plan (par exemple, si vous voulez cacher sa sortie et l'empêchent d'être tué lorsque vous fermez la fenêtre de terminal), vous pouvez le faire à la place:
cmd="google-chrome";
"${cmd}" &>/dev/null &disown;
&
(la première) désolidarise la commande de stdin
.
>/dev/null
désolidarise la session shell de stdout
et stderr
.
&disown
supprime la commande de la liste des travaux du shell . Vous pouvez également utiliser &!
au lieu de &disown
; ils sont tous les deux la même commande.
En outre, lors de la mise d'une commande à l'intérieur d'une variable, il est plus approprié d'utiliser eval "${cmd}"
plutôt que "${cmd}"
:
cmd="google-chrome";
eval "${cmd}" &>/dev/null &disown;
Si vous exécutez cette commande directement dans le Terminal, il affiche le PID du processus que la commande commence. Mais à l'intérieur d'un script shell, aucune sortie ne sera affichée.
Voici une fonction pour elle:
#!/bin/bash
# Run a command in the background.
_evalBg() {
eval "[email protected]" &>/dev/null &disown;
}
cmd="google-chrome";
_evalBg "${cmd}";
http://felixmilea.com/2014/12/running-bash-commands-background-properly/
Voir aussi [BashFAQ/050] (http://mywiki.wooledge.org/BashFAQ/050). –