Costruzione off di risposta ngoozeff
s', se si vuole fare un ordine di marcia completamente in background (ad esempio, se si vuole nascondere la sua uscita e evitare che venga ucciso quando si chiude la sua Terminal finestra), si può fare questo, invece:
cmd="google-chrome";
"${cmd}" &>/dev/null &disown;
&
(il primo) stacca il comando da stdin
.
>/dev/null
stacca la sessione di shell da stdout
e stderr
.
&disown
rimuove il comando dall'elenco dei lavori della shell .
È inoltre possibile utilizzare &!
anziché &disown
; sono entrambi lo stesso comando.
Inoltre, quando mettendo un comando all'interno di una variabile, è più corretto di utilizzare eval "${cmd}"
piuttosto che "${cmd}"
:
cmd="google-chrome";
eval "${cmd}" &>/dev/null &disown;
Se si esegue questo comando direttamente nel Terminal, mostrerà il PID del processo a cui inizia il comando. Ma all'interno di uno script di shell, non verrà visualizzata alcuna uscita.
Ecco una funzione per esso:
#!/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/
Vedere anche [BashFAQ/050] (http://mywiki.wooledge.org/BashFAQ/050). –