Quando você usa com sucesso o exec
, o programa exec
' substitui o seu shell. O status de saída do programa exec
'd é enviado de volta ao processo pai que executou seu shell.
A única maneira pela qual o status de saída do exec pode ser interpretado pela linha que segue exec
é se as chamadas exec falharem, normalmente apenas se o comando solicitado não existir ou se o arquivo não for executável. Isso não inclui problemas de análise de opções, já que eles são analisados pelo programa exec'd assim que é iniciado.
Se você quiser que seu shell interprete o código de saída de um programa, você não pode usar exec
para fazê-lo. Basta executar o programa no seu shell e, quando terminar, você poderá consultar o status de saída.
Para mais informações, você pode consultar man 3 exec
, esta ou uma de suas funções irmãs é a função básica de baixo nível do Unix que seu shell chama.
A única razão razoável que posso usar para usar exec
da linha de comando do seu shell é em uma máquina com memória extremamente baixa, em que a memória usada pelo shell é um problema, ou em uma máquina sujeita a problemas de bifurcação. tem muita sorte de ter um shell, você não pode desembolsar nenhum novo processo, e você só precisa desse novo processo para corrigir o problema.
Usos normais de exec estão em scripts shell, por exemplo
-
(obrigado @chicks) em um script de login que delega o console para um usuário menos confiável; quando o aplicativo termina, não há chance de o usuário ganhar o controle do seu shell
-
em um script de shell que apenas define condições prévias (ambiente, ulimit) para o programa exec'd e deseja que o código de retorno do programa exec'd retorne diretamente para quem chamou seu script. Como o processo exec'd é o mesmo PID, o script pode registrá-lo.