edificio fuera de respuesta ngoozeff
's, si usted quiere hacer una carrera de comandos completamente en el fondo (es decir, si quieres ocultar su salida y le impide ser matado al cerrar su ventana de terminal), se puede hacer esto en su lugar:
cmd="google-chrome";
"${cmd}" &>/dev/null &disown;
&
(la primera) se separa el comando de stdin
.
>/dev/null
separa la sesión de shell de stdout
y stderr
.
&disown
elimina el comando de la lista de trabajos del shell.
También puede usar &!
en lugar de &disown
; ambos son el mismo comando.
Además, al poner un comando dentro de una variable, es más adecuado utilizar eval "${cmd}"
en lugar de "${cmd}"
:
cmd="google-chrome";
eval "${cmd}" &>/dev/null &disown;
Si ejecuta este comando directamente en la Terminal, se mostrará el PID del proceso que inicia el comando. Pero dentro de un script de shell, no se mostrará la salida.
He aquí una función para ello:
#!/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/
Véase también [BashFAQ/050] (http://mywiki.wooledge.org/BashFAQ/050). –