Executando Comandos de Script do Shell Sequencialmente

1

Meu script (.ksh):

cmd1 & cmd2

Eu quero que cmd1 seja executado em segundo plano e cmd2 comece a executar somente depois que cmd1 tenha iniciado. Mas, quando executo meu script, cmd2 está iniciando antes de cmd1 , o que me causa um problema.

Como posso resolver este problema?

    
por Ravi Teja 02.08.2017 / 11:29

2 respostas

1

A solução mais fácil seria adicionar um minúsculo sleep :

cmd1 & sleep 1 && cmd2

Mais robusto seria usar um wrapper para cmd2 , o que garante que o cmd1 esteja realmente em execução e, em seguida, continue.

Algo como:

while ! pgrep cmd1; do
    sleep 1
done
cmd2

while ! pode ser substituído por until BTW.

    
por 02.08.2017 / 11:35
1

Ao usar o operador condicional && , você pode forçar o "acabamento" de uma execução antes que a outra seja iniciada. (Eu coloco "terminar" entre aspas, porque o que é realmente "terminar" é colocar o processo em segundo plano.)

Enquanto

$ (echo "foo" &) ; echo "bar"

pode produzir

bar
foo

o seguinte

$ (echo "foo" &) && echo "bar"

irá produzir

foo
bar

porque o shell precisa determinar o status de saída do primeiro comando antes de poder executar o segundo.

    
por 02.08.2017 / 11:56