Como saber se um comando executado por 'exec' é executado com sucesso ou não?

1

Ao executar um comando com exec , o shell pai sairá quando o comando terminar de ser executado. Como posso saber se um comando executado por exec é executado com sucesso ou não?

    
por Tim 16.04.2016 / 15:21

3 respostas

5

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

  1. (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

  2. 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.

por 16.04.2016 / 16:41
1

Você pode usar o status de saída do comando executado por exec para ver se funcionou ou não, desde que o comando faça coisas sensatas com seu próprio status de saída e o que você deseja saber seja simples o suficiente para codificar em um status de saída.

Parece-me que o bash exec preserva stdout e stderr do comando executado. Eu acho que você pode usar a saída do comando executado por exec para ver se funcionou ou não.

Também me parece que bash verifica as permissões do comando a ser executado, então você obtém alguma saída se der a ele um arquivo que não tenha permissões de execução ou leitura.

    
por 16.04.2016 / 16:29
1

De acordo com a página man exec :

If command is specified, exec shall not return to the shell …

Então você pode ter algum código depois de exec . Se esse código for alcançado, algo deu errado.

   exec foo
   ret=$?
   ## foo was not executed.

caso contrário, o script de chamada do shell que está chamando exec pode receber status do comando foo .

por exemplo, bash1 chamadas bash2 , bash2 chamadas exec foo como acima.

Nesse caso, bash1 receberá o código de retorno de foo . bash2 receberá qualquer erro da chamada para exec foo .

    
por 16.04.2016 / 16:43

Tags