De um ponto de vista de sintaxe do shell, &
separa comandos como ;
/ |
/ &&
... (embora, é claro, com semântica diferente). Então é só:
cmd1 & cmd2 & cmd3 &
Como se pode executar vários programas em segundo plano com um único comando?
Eu tentei os comandos abaixo, mas eles não funcionam.
nohup ./script1.sh & && nohup ./script2.sh &
-bash: syntax error near unexpected token '&&'
nohup ./script1.sh & ; nohup ./script2.sh &
-bash: syntax error near unexpected token ';'
A seção bash manpage intitulada Comandos compostos tem dois opções que funcionam, listam e agrupam comandos.
Um comando de grupo é uma série de comandos colocados entre chaves {}
. Uma lista é a mesma, entre parênteses ()
. Ambos podem ser usados para executar vários comandos em segundo plano e, finalmente, para o plano de fundo de toda a coleção como um conjunto. A construção de lista executa comandos em um subshell, portanto, as atribuições de variáveis não são preservadas.
Para executar um grupo de comandos:
{ command1 & command2 & } &
Você também pode executar seus comandos em uma lista (subshell):
( command1 & command2 ) &
de outra forma:
$(command1 &) && command2 &
Tags bash shell-script