Redireciona stderr para o segundo terminal / tty

0

Eu tentei coisas como rse para diferenciar fluxos de saída padrão e erro padrão de um programa; mas eu realmente gostaria da opção de visualizar os dois em terminais separados , sem redirecionar para um arquivo e seguir em frente ou algo assim (vamos supor que qualquer um dos fluxos possa imprimir códigos de controle de terminal ANSI. )

Existe alguma maneira de abrir o erro padrão de um processo existente em um novo Terminal, ou algo assim?

    
por ELLIOTTCABLE 14.04.2015 / 02:37

2 respostas

1

Abra dois terminais. No segundo, descubra seu dispositivo tty executando o comando tty . Vai imprimir algo como /dev/pts/8 .

No primeiro, execute seu aplicativo redirecionando seu stderr aqui, por exemplo myapp 2>/dev/pts/8 .

Eu uso isso com tanta frequência para depuração que eu configurei o título do terminal para conter o número tty, então eu nem preciso executar o comando tty . Eu faço isso no prompt do shell, combinando a seqüência de escape que altera o título com \l do bash (que é um L minúsculo) para o número da linha tty, ou seja, PS1=$'\[\e]0;\l\a\] ...'

Frequentemente, executo um cat no segundo terminal antes de iniciar o aplicativo real, para o caso de eu acidentalmente digitar algo ali que seja inofensivo e fazer com que o cursor vá para a primeira coluna. Não é obrigatório embora.

    
por 23.04.2015 / 14:56
1

Meu primeiro instinto foi "não", mas depois tive essa fealdade:

sh -c 'echo stdout; echo stderr >&2' 2> >(
    errs=$(cat)
    xterm -e "bash -c '
        cat <<\"END\"
$errs
END
        read -p DONE
    '"
)

O erro padrão é redirecionado para uma substituição de processo em que o conteúdo é coletado e depois passado para um script executado em um xterm.

Estou meio orgulhosa por ter feito isso, mas principalmente envergonhada.

    
por 14.04.2015 / 03:26