En s'appuyant sur ngoozeff
Si vous voulez faire en sorte qu'une commande s'exécute, la réponse est la suivante complètement en arrière-plan (c'est-à-dire, si vous voulez cacher sa sortie y empêcher qu'il soit tué lorsque vous fermez sa fenêtre Terminal), vous pouvez faire ceci à la place :
cmd="google-chrome";
"${cmd}" &>/dev/null & disown;
-
&>/dev/null
définit les paramètres de la commande stdout
y stderr
a /dev/null
au lieu de les hériter du processus parent.
-
&
permet au shell d'exécuter la commande en arrière-plan.
-
disown
supprime le travail "courant", le dernier arrêté ou mis en arrière-plan, du contrôle des travaux du shell.
Dans certaines coquilles, vous pouvez également utiliser &!
au lieu de & disown
; ils ont tous deux le même effet. Bash ne supporte pas &!
mais
De même, lorsqu'on place une commande à l'intérieur d'une variable, il est plus correct 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 affichera le PID du processus que la commande lance. Mais à l'intérieur d'un shell script , aucune sortie seront affichés.
Voici une fonction pour cela :
#!/bin/bash
# Run a command in the background.
_evalBg() {
eval "$@" &>/dev/null & disown;
}
cmd="google-chrome";
_evalBg "${cmd}";
Voir aussi : Exécution correcte des commandes bash en arrière-plan