Me he encontrado con un problema de dolor de cabeza.
Quiero ejecutar múltiples comandos en segundo plano, así que quiero iniciarlos en bash uno por uno. Es fácil iniciar un comando en linux shell en segundo plano, así:
myCommand &
También es fácil iniciar múltiples comandos, así:
myCommand1 && myCommand2
o
myCommand1 ; myCommand2
Pero si quiero ejecutar múltiples comandos en segundo plano, probé el siguiente formato de comando, pero fallé:
myCommand1 & && myCommand2 &
o
myCommand1 & ; myCommand2 &
Ambos formatos fallan. ¿Cómo puedo ejecutar múltiples comandos que tienen &
en una línea de comando?
command-line
bash
Reloj ZHONG
fuente
fuente
Respuestas:
Utilizar ().
Si desea ejecutarlos secuencialmente:
o
Si quieres que se ejecuten en paralelo:
En bash también puedes usar esto (el espacio detrás de {y the; son obligatorios):
fuente
(myCommand1 &) && (myCommand2 &)
se ejecutarámyCommand2
incluso simyCommand1
falla.Supongo que quieres esto:
Esto comienza
myCommand1
y lo envía al fondo ya que es seguido por un signo y luego comienza inmediatamentemyCommand2
y también lo envía al fondo, liberando así el shell nuevamente.Liza
Para una mejor comprensión, puede sustituir la tubería por comando aquí.
Vamos a dividir eso en ejemplos. Puede crear una lista combinando comandos y separándolos con uno de estos
; & && ||
:Podrá poner fin a las listas con uno de los siguientes:
; & <newline>
.Normalmente ejecuta un comando o una lista presionando Enter, que es igual
<newline>
. El punto y coma;
tiene el mismo propósito, especialmente en los scripts. Ampersand,&
sin embargo, inicia los comandos en un subshell en segundo plano, liberando inmediatamente el shell.Puede usar
()
corchetes redondos o rizados{}
para agrupar más listas, la diferencia es que los corchetes generan una subshell y los rizados no. Los corchetes necesitan un espacio después del primero y un punto y coma o una nueva línea antes del corchete de cierre. Por ejemplo:Esto puede ser bastante complicado, si no está seguro de usarlo
true
yfalse
para probar si la construcción funciona como se esperaba:Control de trabajo
El
jobs
comando muestra una lista de los trabajos en segundo plano que se están ejecutando o que se han terminado recientemente en el shell actual. Existen varios métodos abreviados de teclado y comandos para el control del trabajo:jobs
listafg
=%
pone un proceso en primer plano comenzando si es necesario, puede especificar el proceso de la siguiente manera:bg
=%&
toma un proceso en segundo plano y lo inicia si es necesario:wait
espera a que finalice un proceso en segundo plano y devuelve su estado de finalización:Imagine que inició un proceso largo (
jobs
revela que es el número 3) y luego se da cuenta de que desea que la computadora se suspenda cuando finalice, másecho
un mensaje si el proceso no tuvo éxito:fuente
man bash
) y se usa ampliamente como se pretende AFAIK: nunca experimenté nada extraño.