Capture stdout e stderr como variáveis separadas na casca do peixe

1

Isso é possível?

Eu gostaria de executar um comando, mas capturar seu stdout e stderr como variáveis separadas. Atualmente estou usando set -l var (cmd) , o que deixa o stderr intocado. Eu posso fazer set -l var (cmd ^&1) que irá mesclar stdout e stderr em var, mas então eu não posso facilmente separá-los novamente.

Existe alguma maneira de obter var e var_err para manter stdout e stderr de cmd?

    
por Soumya 21.07.2017 / 20:19

2 respostas

2
begin; cmd ^|read -z err; end |read -z out

De casca de peixe / casca de peixe # 2463 ,

An issue in your fish example is that it redirects [stdout] of both [cmd] and [read], so if the latter prints anything, it'll be carried through the pipe.

Mas eu não acho que a leitura deva imprimir nada (especialmente no stdout) no caso normal, então isso deve estar bem.

Editar : Se a semântica exata de set var (cmd) for necessária, isso pode ser obtido usando set var (printf '%s' $out) e set var_err (printf '%s' $err)

    
por 06.09.2017 / 07:11
0

O método mais simples seria redirecionar um dos fluxos para um arquivo:

set tmpf (mktemp)
trap "rm $tmpf" EXIT

set var (cmd ^ $tmpf)
set var_err (cat $tmpf)
    
por 22.07.2017 / 02:32