tee stdout para stderr?

16

Gostaria de enviar stdout de um processo para o stdin de outro processo, mas também para o console. Enviando stdout para stdout + stderr, por exemplo.

Por exemplo, eu tenho git edit aliado ao seguinte:

git status --short | cut -b4- | xargs gvim --remote

Gostaria que a lista de nomes de arquivos fosse enviada para a tela, bem como para xargs .

Então, existe um utilitário tee -like que fará isso? Para que eu possa fazer algo como:

git status --short | \
    cut -b4- | almost-but-not-quite-entirely-unlike-tee | \
    xargs gvim --remote
    
por Roger Lipscombe 30.04.2014 / 11:10

3 respostas

13

tee pode duplicar para o console atual usando tee /dev/tty

git status --short | cut -b4- | tee /dev/tty | xargs gvim --remote

Alterativamente, você pode usar /dev/stdout ou /dev/stderr , mas eles podem ser redirecionados se o seu comando estiver dentro de um script. Observe que /dev/tty sempre será o console (e pode não existir em um shell não interativo). Isso está errado, leia os comentários.

    
por 30.04.2014 / 11:25
4

Uma solução mais geral que /dev/tty :

start cmd:> echo foo | tee /dev/stderr 
foo
foo
    
por 30.04.2014 / 11:28
3

Você pode usar o comando tee , apenas alimentá-lo com o arquivo STDERR, como exemplo:

tee /dev/stderr
tee /proc/self/fd/2

então, nesse caso, seu pseudônimo talvez:

git status --short | \
    cut -b4- | tee /dev/stderr | \
    xargs gvim --remote
    
por 30.04.2014 / 11:29