Además de las respuestas de Martin, Ash y Kevin, a veces verás un ampersand utilizado matemáticamente para un bit a bit Y * :
$ 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 en el primer número Y el segundo número, establezca ese bit en uno en la respuesta.
* La característica en la respuesta de Kevin se conoce como un AND lógico .
Para dar más detalles sobre la respuesta de Ash, cuando se usa en la redirección, el signo y puede decirle al shell que copie un descriptor de archivo. En este comando, echo "hello" > outputfile 2>&1
el signo y comercial hace que cualquier salida que pueda ir al 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, nuevo 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 próxima prueba.
Pausado hasta nuevo aviso.
fuente
>& filename
genera tanto stdout como stderr en el mismo archivo. Si solo quiere redirigir stderr (y dejar solo stdout), lo haría2> filename
. En cuanto a su otra pregunta, lo más probable es que use ambosnohup
y&
.logout
exit
comando o .En un script de shell Bash, el signo "&" se usa para bifurcar procesos:
Hará que el comando find se bifurque y se ejecute en segundo plano (siempre puede eliminarlo por su PID).
fuente
Para recuperar su solicitud de inmediato y ejecutar el proceso en segundo plano.
nohup permite que el proceso en segundo plano continúe ejecutándose incluso después de que el usuario cierre sesión (o salga del shell de inicio).
> & redirige tanto la salida estándar como el error estándar al archivo de registro.
Y ejecuta todo en segundo plano, devolviéndole su solicitud 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 el cierre estándar, salen (el programador puede cambiarlo).
Cuando el shell padre sale, stdin se cierra en los hijos y (a menudo, generalmente) 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. (Tenga en cuenta que un programador puede cambiar todo esto al escribir el programa).
Entonces, lo que nohup hace es darle al proceso del niño un entorno de E / S separado, atando los entresijos a algo que no está atado al caparazón principal y protegiendo al niño de la señal SIGHUP. Una vez que el usuario se desconecta, verá el proceso de fondo nohup propiedad de init (proceso 1), no el shell del usuario.
Sin embargo
nohup
, no puede hacer el trabajo por completo si el proceso se ejecuta en primer plano, por lo que&
se utiliza para ejecutar el programa en segundo plano, donde felizmente puede seguir ejecutándose con o sin un usuario conectado.fuente
Además de la respuesta de @ Martin: El otro uso de ampersand (
>&
como arriba) es capturar ambosstdout
ystderr
. Normalmente, si redirige la salida a un archivo con solo '>', solo obtendrá la salidastdout
sin errores.fuente
Además de la respuesta de Martin y Ash, a veces puedes ver el uso de una
&&
ficha. Esto se usa para decir "ejecutar el segundo comando si y solo si el primer comando se ejecutó correctamente". Un comando bien escrito, si tiene algún error, no saldrá con éxito.fuente
La respuesta de Martin es buena, pero un poco ambigua. El comando siempre se bifurca y ejecuta, pero el comportamiento normal del shell es esperar en el comando hasta que salga. El ampersand lo pone en segundo plano para que recupere su terminal y pueda hacer otras cosas. Si el proceso arroja datos a stdout o stderr, esto se mezclará con lo que sea que esté haciendo en el indicador y puede confundirlo. Es por eso que redirige luego con> & /path/to/logfile.txt.
En respuesta a George2, el comportamiento normal para una salida de shell es enviar la señal SIGHUP a todos los procesos en el mismo grupo de procesos (esencialmente cosas que generó) y generalmente terminarán. Si desea que esto continúe incluso si cierra el proceso de shell, puede usar el comando nohup para hacer que ignoren esta señal y sigan ejecutándose. Hay un nombre especial para este tipo de proceso, se llama proceso demonio (pronunciado 'demonio').
fuente