Execute o comando e armazene tudo na variável no bash

1

No script bash que estou desenvolvendo, estou tentando executar o comando e capturar em variável (s):

  • stdout
  • stderr
  • código de status

como conseguir isso? O comando é tar , se tiver algum significado.

Eu tentei a abordagem mais padrão:

TAROUTPUT=$(tar -cf arch.tar /path/to/dir)

Baseado em algum trabalho que eu fiz (eu realmente não produzi tar failure) eu só obtenho stdout disto, stderr não é armazenado em variável. A solução perfeita tem TAROUTPUT (com as variáveis stdout & stderr) e TARSTATUS .

Obrigado antecipadamente.

    
por Miloš Đakonović 20.05.2018 / 14:02

2 respostas

2
TAROUTPUT=$(tar -cf arch.tar /path/to/dir 2>&1)
this_is_the_tar_exit_code=$?
    
por 20.05.2018 / 14:09
0

Se você quiser separar stdout de stderr :

craft@engine:~$ tar -cf arch.tar /path/to/dir 1>/tmp/tar_stdout 2>/tmp/tar_stderr; RETCODE=$( echo ${?} );
craft@engine:~$ stdout_var=$( cat /tmp/tar_stdout )
craft@engine:~$ stderr_var=$( cat /tmp/tar_stderr )
craft@engine:~$ echo -e "STDOUT : ${stdout_var}\nSTDERR : ${stderr_var}\nCommand Status: ${RETCODE}"
  • 1 > / tmp / tar_stdout: salve a saída stdout em um arquivo temporário.
  • 2 > / tmp / tar_stderr: salve stderr output em um arquivo.
  • O código de retorno do comando (status de saída) é salvo na variável ${?} .
por 20.05.2018 / 14:19