Armazena a saída do comando grive para a variável no script bash

4

Estou tentando criar um script que sincronize meu computador com o Google Drive usando a ferramenta grive . Eu gostaria de armazenar a saída do comando grive para uma variável bash, mas parece que não consigo fazê-lo funcionar.

Algumas pesquisas me ensinaram que as saídas de comando podem ser salvas em variáveis usando a seguinte sintaxe:

VARABLENAME=$(command)

e a saída pode ser impressa posteriormente por

echo ${VARIABLENAME}

No entanto, o comando grive parece ser uma exceção, porque quando eu uso esta sintaxe, ela ainda imprime a saída no terminal e o conteúdo da variável está vazio.

Como posso armazenar a saída de grive em uma variável corretamente?

    
por quantumbutterfly 29.07.2015 / 16:36

1 resposta

8

O problema era que o comando grive estava transmitindo para o fluxo de erros, STDERR (descritor de arquivo 2), que é normalmente usado para transmitir mensagens de erro enquanto o STDOUT (descritor de arquivo 1) é usado para mostrar real (após sucesso) saída de qualquer programa (estritamente falando).

Eu não usei grive , mas de acordo com suas palavras, o desenvolvedor pode ter usado o STDERR apenas para mostrar qualquer mensagem do comando.

Agora a substituição de comando que você usou:

VARABLENAME=$(command)

salvará o STDOUT de command a VARABLENAME , não STDERR. Como resultado, a variável estava vazia e você estava vendo mensagens no terminal.

Eu sugeri:

VARABLENAME="$(command 2>&1)"

isto irá salvar tanto o STDOUT quanto o STDERR para a variável (no seu caso, apenas STDERR, pois não há STDOUT), então você obteria o resultado desejado usando echo "${VARIABLENAME}" .

Além disso, como não há STDOUT, você pode salvar apenas o STDERR na variável (generalização, true para qualquer programa):

VARABLENAME="$(command 2>&1 >/dev/null)"
    
por heemayl 29.07.2015 / 16:57

Tags