Respuestas:
La &
dirige el shell para ejecutar el comando en el fondo, es decir, que se bifurca y se ejecutan en un sub-shell por separado, como un trabajo, de forma asíncrona.
Tenga en cuenta que cuando coloca &
la salida, tanto stdout como stderr , todavía se imprimirán en la pantalla . Si no desea ver ningún resultado en la pantalla, redirija ambos stdout
y stderr
a un archivo:
myscript > ~/myscript.log 2>&1 &
Por lo general, es posible que desees descartarlo stderr
redirigiéndolo a /dev/null
si no te preocupa analizar los errores más adelante.
También puede ejecutar comandos / scripts al mismo tiempo, en subcapas separadas. Por ej.
./script1 & ./script2 & ./script3 &
Un trabajo en segundo plano puede volver a la línea de comando antes de que finalice con el comando:
fg <job-number>
El job-number
se puede obtener ejecutando
jobs
2>&1
redirige stderr
a stdout
.
stty tostop
hará que se suspendan los trabajos en segundo plano si intentan escribir en el terminal.
Cuando lo usa &
, el proceso se ejecuta en segundo plano. Pero su salida estándar sigue siendo la terminal.
De hecho, puede ejecutar ping 8.8.8.8 &
y find / -name '*test*' &
al mismo tiempo (lo que resulta en una salida mixta), pero no puede ejecutar ping 8.8.8.8
y find / -name '*test*'
al mismo tiempo en el mismo shell.
Si no quieres ver nada, usa algo como ping 8.8.8.8 &> /dev/null &
.
Además, es posible que desee aprender sobre nohup
y disown
.
disown
no evita que la salida se imprima en el terminal.
/dev/null
como un archivo para redirigir la salida del terminal si se desea descartar la salida en lugar de guardarla en algún lugar. ¿Y estoy en lo cierto que2>&1
redirigestderr
astdout
? Quizás también quieras aclarar eso ... Gracias.