En un script de shell Bash, el signo "&" se usa para bifurcar procesos:
find -name hello &
Hará que el comando de búsqueda se bifurque y se ejecute en segundo plano (siempre puede eliminarlo por su PID).
¿Por qué ejecutar un comando de shell de Linux con '&'?
Para recuperar su solicitud de inmediato y ejecutar el proceso en segundo plano.
¿Cuál es la función de ellos?
nohup permite que el proceso en segundo plano continúe ejecutándose incluso después de que el usuario cierre la sesión (o salga del shell de inicio).
>& redirige tanto la salida estándar como el error estándar al archivo de registro.
& ejecuta todo en segundo plano y le devuelve el aviso de inmediato.
Explicación:
Cada proceso de Linux abre tres canales de E/S, una entrada "stdin", una salida estándar "stdout" y una salida de error estándar "stderr". Se pueden usar para binario, pero tradicionalmente son texto. Cuando la mayoría de los programas ven cerrar la entrada estándar, salen (esto puede ser cambiado por el programador).
Cuando el shell principal sale, stdin se cierra en los hijos y (a menudo, por lo general) los hijos también salen. Además, los niños reciben una señal de software, SIGHUP, que indica que el usuario ha "colgado" (anteriormente, el módem) y el valor predeterminado aquí es salir también. (Nota, un programador puede cambiar todo esto al escribir el programa).
Entonces, lo que hace nohup es darle al proceso secundario un entorno de E/S separado, vinculando las entradas y salidas a algo que no está vinculado al shell principal y protegiendo al hijo de la señal SIGHUP. Una vez que el usuario se desconecte, verá el proceso en segundo plano nohup propiedad de init (proceso 1), no el shell del usuario.
Sin embargo nohup
no puede hacer el trabajo completamente si el proceso se ejecuta en primer plano, entonces &
se usa para ejecutar el programa en segundo plano, donde felizmente puede seguir ejecutándose con o sin un usuario conectado.
Además de las respuestas de Martin, Ash y Kevin, a veces verás un ampersand utilizado matemáticamente para un AND bit a bit:
$ echo $(( 11 & 7 ))
3
En caso de que no esté familiarizado con los operadores de bits:
11: 1011
7: 0111
-------- AND
3: 0011
En cada posición hay un bit uno en el primer número Y el segundo número, establezca ese bit en uno en la respuesta.
Para profundizar en la respuesta de Ash, cuando se usa en la redirección, el ampersand puede indicarle al shell que copie un descriptor de archivo. En este comando echo "hello" > outputfile 2>&1
el ampersand hace que cualquier salida que pueda ir a un error estándar (stderr, descriptor de archivo 2) vaya al mismo lugar que la salida estándar (stdout, descriptor de archivo 1, el valor predeterminado para el lado izquierdo de >
). El >& outputfile
operador es la abreviatura de > outputfile 2>&1
.
Además, como novedad en Bash 4, hay dos nuevos terminadores para cláusulas en el case
comando ;&
y ;;&
que afectan si un caso "falla" y, de ser así, si se realiza la siguiente prueba.