¿Cómo se pueden ejecutar múltiples programas en segundo plano con un solo comando?
He probado los siguientes comandos, pero no funcionan.
nohup ./script1.sh & && nohup ./script2.sh &
-bash: syntax error near unexpected token '&&'
nohup ./script1.sh & ; nohup ./script2.sh &
-bash: syntax error near unexpected token ';'
bash
shell-script
Rahul Patil
fuente
fuente
Respuestas:
Desde el punto de vista de la sintaxis de shell,
&
separa comandos como;
/|
/&&
... (aunque, por supuesto, con una semántica diferente). Entonces es solo:fuente
;
comienza el siguiente comando tan pronto como termina el primero.&
en realidad pone el comando en segundo plano. solo intenta esto:echo foo & echo bar & echo test &
sudo
así, podría ingresar la contraseña solo una vez, envolverla enbash -c
o similar.La sección de la página de manual de bash titulada Compound Commands tiene dos opciones que funcionarían, enumerar y agrupar comandos.
Un comando de grupo es una serie de comandos encerrados entre llaves
{}
. Una lista es la misma, encerrada entre paréntesis()
. Ambos se pueden usar para poner en segundo plano múltiples comandos dentro y finalmente para poner en segundo plano toda la colección como un conjunto. La construcción de la lista ejecuta comandos en una subshell, por lo que las asignaciones de variables no se conservan.Para ejecutar un grupo de comandos:
También puede ejecutar sus comandos en una lista (subshell):
fuente
()
sintaxis de la lista ejecuta los comandos incluidos en una subshell, por lo que las variables no se conservan dentro.de otra manera:
fuente
&&
en su pregunta, significa que primero debe ejecutar un comando y luego, si se ejecuta con éxito, ejecute el siguiente comando. Si no lo considera, puede ejecutarcommand1 & ; command2 & ;
;
sin problemas con eso