Esto se conoce como job control
bajo unix. El &
informa al shell para poner el comando en segundo plano. Esto significa que continúa ejecutando el sys-snap.sh
comando pero lo regresa a su shell para permitirle continuar haciendo comandos paralelos.
Puede ver la lista de trabajos que se ejecutan actualmente con el jobs
comando. Puede volver al comando (poner en primer plano) con el uso del fg
comando. Lo que devuelve el comando al estado en el que no ve ningún mensaje y tiene que emitir Ctrl, Cpara matar el proceso. Sin embargo, puede suspender (pausar) ese proceso, emitiendo Ctrl- Z. Esto hará una pausa sys-snap.sh
y te devolverá a tu mensaje. Puede entonces fondo que (como si la hubiera emitido con la &
) con el bg
comando, y se reanuda la ejecución de esta en pausa el estado Ctrl- Zlo había puesto en.
Tenga en cuenta que puede tener más de un trabajo a la vez (como se muestra en jobs
):
[1]- Running sys-snap.sh &
[2]+ Running another-script.sh &
Puede ponerlos en segundo plano y en primer plano utilizando su número de trabajo, %1
será sys-snap.sh
y %2
será another-script.sh
. Si usa fg
o bg
sin argumentos, ejecutará el comando en el trabajo marcado +
en el jobs
resultado anterior.
fg %1
volverá a poner sys-snap.sh
en primer plano, dejando another-script.sh
en segundo plano.
Puede emitir la secuencia Ctrl- Cpara ejecutar trabajos sin tener que ponerlos en primer plano con el kill
comando, kill %1
enviará el equivalente de Ctrl- Ca sys-snap.sh
.
Si está utilizando bash shell, el man bash
comando tiene una sección detallada debajo de la sección titulada 'CONTROL DE TRABAJO' que entra en más detalles.
En cuanto al nombre de sys-snap.sh
, bajo los nombres de archivo Unix son arbitrarios (con un par de excepciones, como los archivos de carga dinámica). No es necesario que tengan extensiones de archivo específicas para que se ejecuten como un script de shell, invoquen otros comandos como perl
o php
etc. Se suele usar para proporcionar claridad, que en este caso, es .sh
un Script de Shell que utiliza Bourne Shell /bin/sh
.
La parte funcional de sys-snap.sh
(cuando miras su contenido con algo como el less
comando) es el Shebang . En la primera línea probablemente encontrarás uno de:
#! /bin/sh
#! /bin/bash
#! /usr/local/bin/bash
o similar. En términos básicos, se ejecuta un comando después de #!
(como /bin/sh
) y el contenido del resto del archivo de script se alimenta de una línea a la vez. Tenga en cuenta que el archivo también debe configurarse como ejecutable chmod
para que pueda ejecutarlo como un comando. Si no se establecieron los permisos, entonces shebang
no tiene ningún efecto, ya que obtendría el error:
bash: sys-snap.sh: command not found
o si lo ejecutó por ruta explícita ./sys-snap.sh
(es .
decir, el directorio de trabajo actual) obtendría:
bash: ./sys-snap.sh: Permission denied
La otra alternativa es dejarlo sin permisos de ejecución y pedirle explícitamente a / bin / sh que lo ejecute:
/bin/sh sys-snap.sh &
&&
diferente de un solo ampersand&
?