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 stdouty stderra un archivo:
myscript > ~/myscript.log 2>&1 &
Por lo general, es posible que desees descartarlo stderrredirigiéndolo a /dev/nullsi 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-numberse puede obtener ejecutando
jobs
2>&1redirige stderra stdout.
stty tostophará 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.8y 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 nohupy disown.
disownno evita que la salida se imprima en el terminal.
/dev/nullcomo 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>&1redirigestderrastdout? Quizás también quieras aclarar eso ... Gracias.