Gebäude weg von ngoozeff
‚s Antwort, wenn Sie einen Befehl ausführen zu wollen vollständig im Hintergrund (dh, wenn Sie wollen verstecken seinen Ausgang und verhindern, dass es getötet zu werden, wenn Sie in der Nähe seines Terminal-Fenster), können Sie diese stattdessen tun:
cmd="google-chrome";
"${cmd}" &>/dev/null &disown;
&
(die erste) löst den Befehl von stdin
.
>/dev/null
löst die Shell-Sitzung von stdout
und stderr
.
&disown
entfernt den Befehl aus der Auftragsliste der Shell.
Sie können auch &!
statt &disown
verwenden; Sie sind beide derselbe Befehl.
Auch wenn ein Befehl in einer Variablen setzen, dann ist es geeignetere eval "${cmd}"
eher zu verwenden als "${cmd}"
:
cmd="google-chrome";
eval "${cmd}" &>/dev/null &disown;
Wenn Sie diesen Befehl ausführen direkt im Terminal, wird die PID der Show Prozess, der der Befehl startet. Aber innerhalb eines Shell-Skript, keine Ausgabe wird angezeigt.
Hier ist eine Funktion für sie:
#!/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/
Siehe auch [BashFAQ/050] (http://mywiki.wooledge.org/BashFAQ/050). –