Como continuar a execução do script de shell depois de chamar outro script de shell com 'exec'?

2

Eu tenho um script:

ACTION="build"

env -i
exec ./makelib.sh Release "${ACTION}"

env -i
exec ./makelib.sh Debug "${ACTION}"

Segundo exec não executa. Por que e como posso executá-lo?

    
por Eonil 01.09.2010 / 16:45

3 respostas

3

exec irá substituir todo o processo pelo conteúdo do comando que você está passando - neste caso, makelib.sh. Confira a página man para a função linux exec - ela explica em profundidade.

Eu assumo que este é um script de shell; Se você quiser que o script simplesmente execute os outros scripts sequencialmente (um após o outro), você usará:

ACTION="build"

env -i
./makelib.sh Release "${ACTION}"
./makelib.sh Debug "${ACTION}"

Isso executará ./makelib.sh Release "${ACTION}" primeiro; depois que terminar, ele será executado em ./makelib.sh Debug "${ACTION}" . Se você quer que ambos os comandos sejam executados em paralelo (ao mesmo tempo), você pode fazer o processo em segundo plano usando & .

ACTION="build"

env -i
./makelib.sh Release "${ACTION}" &
./makelib.sh Debug "${ACTION}" &

Tenha em mente que background ambos os processos significa que você terá dois processos em execução (e saindo!) simultaneamente. Então, se você tiver saída de log, sua tela ficará confusa, para dizer o mínimo.

Espero que isso ajude!

    
por 01.09.2010 / 16:58
2

exec está substituindo o shell atual pelos comandos passados. Se você quiser que o script continue, remova a (s) instrução (s) exec.

    
por 01.09.2010 / 16:50
0

Que tal adicionar o "&" personagem para o final da linha, se você quer que ele seja executado em segundo plano, ou "& &" entre a primeira e a segunda declaração se você quer que a segunda seja condicionada ao sucesso do primeiro?

(Meu shell-fu é fraco, então eu adoraria ouvir porque isso pode estar errado, para fins educacionais.)

    
por 01.09.2010 / 16:56

Tags