Unix separa vários comandos que tem '&' (executar em segundo plano) no final

4

Para separar comandos regulares no Unix é colocar ponto e vírgula no final assim:

cd /path/to/file;./someExecutable;

Mas parece que não funciona para comandos como este:

./myProgram1 > /dev/null &
./myProgram2 > /dev/null &
=>./myProgram1 > /dev/null &;./myProgram2 > /dev/null &;

Existe alguma maneira de separar esses tipos de comandos?

Além disso, se abaixo de 2 casos são equivalentes se eu copiar e colar no prompt de comando? Obrigado.

cd /path/to/file;./someExecutable;

cd /path/to/file;
./someExecutable;
    
por Stan 15.09.2010 / 17:14

2 respostas

12

Bem, o ";" faz com que o shell aguarde até que o comando termine e continue com o próximo comando.

O "&" enviará qualquer processo diretamente para o segundo plano e continuará com o próximo comando - não importando se o primeiro comando foi concluído ou se ainda está em execução.

Então "& amp ;;" não funcionará como você espera.

Mas na verdade não tenho certeza do que você espera.

Tente isso no seu shell:

sleep 2 && echo 1 & echo 2 & sleep 3 && echo 3

irá produzir:     2     1     3

Agora compare com

sleep 2 ; echo 1 & echo 2 & sleep 3 ; echo 3

qual produzirá     1     2     3

Atenciosamente.

    
por 15.09.2010 / 17:24
14

command1 & command2 Executará command1 , enviará o processo para o segundo plano e começará imediatamente a executar command2 , mesmo que command1 não tenha sido concluído.

command1 ; command2 Executará command1 e, em seguida, executará command2 uma vez command1 acabamentos, independentemente de command1 ter saído com êxito.

command1 && command2 executará apenas command2 uma vez command1 concluiu a execução com êxito. Se command1 falhar, command2 não será executado.

(... também, para ser completo ...)

command1 || command2 executará apenas command2 se command1 falhar (sai com um código de saída diferente de zero).

    
por 15.09.2010 / 17:34