Armazenando a saída do script shell para a variável

1

Eu li muitos tópicos sobre esse tópico, mas nenhuma das soluções funcionou para mim.

Estou tentando fazer o seguinte:

RELEASE_COMMAND_OUTPUT=$(exec ~/temp/execs/github-release release --user patick --repo $REPO_NAME --tag $RELEASE_VERSION --name $RELEASE_VERSION --description "$DESC")

mas a saída de ./github-release não é armazenada na variável RELEASE_COMMAND_OUTPUT .

Estou ciente do conceito de substituição de comando , mas nenhuma das soluções que já tentei ter funcionado. O que estou fazendo errado?

    
por Patrick Conway 15.06.2017 / 19:36

1 resposta

1

Como explicado nos comentários da sua pergunta, a variável RELEASE_COMMAND_OUTPUT obterá apenas o STDOUT (saída padrão) do seu comando, mas não o STDERR erro padrão , como parece ser o seu caso.

Em caso de dúvida sobre a saída do seu comando, você pode usar processo de substituição para marque o STDERR em vermelho como no seguinte exemplo:

command 2> >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done)

Que é que redireciona (a parte 2> ) o STDERR de o command como entrada para o bloco while que irá imprimi-lo em vermelho no terminal.

Você também pode fazer o oposto, marcando o STDOUT como vermelho com:

command | grep .

Porque o grep age apenas em STDOUT

OBSERVAÇÃO : em alguns sistemas, talvez seja necessário ativar a cor no grep usando o sinalizador --color=auto . No Macos e no Linux, geralmente é ativado por padrão.

    
por 15.06.2017 / 22:03