Como capturar stderr de uma palavra-chave bash (por exemplo, hora)?

1

Eu quero tempo lendo o histórico bash e colocar o resultado em uma variável. Infelizmente, time (que é uma palavra-chave shell) imprime o resultado em stderr , e aparentemente redirecionar stderr das palavras-chave shell não funciona da mesma forma que redirecionar a saída de comando regular. Em outras palavras,

foo=$(time history -r 2>&1)

não funciona (a variável foo está vazia, a saída é impressa no terminal). Como posso capturar a saída de time keyword?

Observação: como history é um shell integrado, não posso usar o comando time externo (ou seja, /usr/bin/time ) - preciso usar time keyword no bash.

    
por Jan Warchoł 11.03.2018 / 11:54

1 resposta

3

Você pode usar a seguinte sintaxe:

foo=$((time history -r) 2>&1)

Colocando o comando em um () e redirecionando seu stderr para stdout

Exemplo:

$ foo=$((time history -r) 2>&1)
$ echo $foo
real 0m0.001s user 0m0.000s sys 0m0.000s
$ 
    
por 11.03.2018 / 12:31