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 ';'

o que é um único "comando"? Uma linha de festança?
Oluf Lorenzen 13/03/2013


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 &

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 ) &

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 & 

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.