Obtém o código de saída do comando executado pelo comando de script linux

1

Note que isto é executado em um ambiente linux debian

Eu tenho o script de exemplo a seguir chamado HelloWorld.sh

#!/bin/bash

echo "Hello World"
exit 1

Eu então executo o seguinte comando

script -c ./HelloWorld.sh foo ; echo $?

$? retorna 0, o que é esperado, pois o próprio comando de script foi executado com sucesso. No entanto, eu quero o código de retorno HelloWorld.sh que seria 1 se eu apenas executasse o seguinte comando.

bash HelloWorld.sh ; echo $?

Olhando para a página de manual, vejo que o comando de script não retorna nada, então o seguinte não ajudaria

return_code='script -c ./HelloWorld.sh foo'

A pergunta que gostaria de fazer é se existe uma maneira de obter o valor de retorno de HelloWorld.sh ao executá-lo no contexto do comando de script, como enviar o valor de saída para o shell pai. Se não, como você recomendaria fazê-lo?

Minhas possíveis respostas sobre como eu faria se não pudesse usar o comando de script

  1. Faça o HelloWorld.sh gravar na memória compartilhada usando a API shm
  2. Faça o HelloWorld.sh gravar em um arquivo

Ambos os métodos requerem a limpeza do objeto de memória compartilhada e do arquivo respectivamente, por isso estou pedindo meu próprio conhecimento pessoal se existe uma solução mais simples

    
por Jason Zhu 15.10.2013 / 23:08

2 respostas

3

A partir da página de manual do script

 -e, --return
         Return the exit code of the child process.  Uses the same format
         as bash termination on signal termination exit code is 128+n.

Então, isso deve funcionar

$ script -e -c ./HelloWorld.sh; echo $?
Script started, file is typescript
Hello World
Script done, file is typescript
1
    
por 15.10.2013 / 23:13
3

man script,

   -e, --return
          Return the exit code of the child process.  Uses the same format
          as bash termination on signal termination exit code is 128+n.
    
por 15.10.2013 / 23:13

Tags