Como se pode executar vários programas em segundo plano com um único comando?

36

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 ';'
Rahul Patil
fonte
o que é um único "comando"? Uma linha de festança?
Oluf Lorenzen 13/03/2013
1
stackoverflow.com/questions/14612371/…
Ciro Santilli escreveu
Talvez esteja faltando algo óbvio, mas && implica conhecer o código de saída do comando anterior. Se você o colocar em segundo plano, o código de saída não será conhecido. Qual era a necessidade funcional lá?
Richlv 23/01

Respostas:

32

Do ponto de vista da sintaxe do shell, &separa comandos como ;/ |/ &&... (embora, é claro, com semântica diferente). Então é só:

cmd1 & cmd2 & cmd3 &
Stéphane Chazelas
fonte
1
isto não é / completamente / certo, ;inicia o próximo comando assim que o primeiro termina. &realmente coloca o comando em segundo plano. apenas tente o seguinte:echo foo & echo bar & echo test &
Oluf Lorenzen
1
@Finkregh, é claro. Ninguém duvida disso. Eu apenas quis dizer que os dois comandos separados (do ponto de vista da sintaxe) sem implicações sobre como eles são executados.
Stéphane Chazelas
Não foi exatamente o que foi perguntado, já que a pergunta especificava a emissão de um "comando único". Nem é a minha resposta, uma vez que também é uma série de comandos, mas tem pelo menos uma semântica de um único comando, em que a saída é concatenado, pode ser redirecionado, etc.
Eli Heady
"Múltiplos comandos com um único comando" parece ser um oxímoro - o que isso significa? Se for para algo sudoassim, você poderá digitar a senha apenas uma vez, agrupar bash -cou semelhante.
Richlv
12

A seção da página de manual do bash intitulada Comandos compostos tem duas opções que funcionariam, listar e agrupar comandos.

Um comando de grupo é uma série de comandos entre chaves {}. Uma lista é a mesma, entre parênteses (). Ambos podem ser usados ​​para colocar em segundo plano vários comandos dentro e, finalmente, para colocar em segundo plano toda a coleção como um conjunto. A construção de lista executa comandos em um subshell, para que as atribuições de variáveis ​​não sejam preservadas.

Para executar um grupo de comandos:

{ command1 & command2 & } &

Você também pode executar seus comandos em uma lista (subshell):

( command1 & command2 ) &
Eli Heady
fonte
1
De nada. Eu adicionei o link ao manual. Observe que a ()sintaxe da lista executa os comandos incluídos em um subshell, para que as variáveis ​​não sejam preservadas.
Eli Heady
3

outra maneira:

$(command1 &) && command2 & 
PersianGulf
fonte
Não, ele será executado primeiro comando depois de chegada em primeiro lugar, então ele irá executar outro comando
Rahul Patil
você usou &&na sua pergunta, isso significa que a primeira execução de um comando, em seguida, se for executado com sucesso, execute próxima command.if você não considerá-lo, você pode executarcommand1 & ; command2 & ;
Golfo Pérsico
primeiro comando vai com sucesso em bg, ou executar usando ;nenhum problema com isso
Rahul Patil