Eu estou assistindo a saída do meu comando complicado com less
, o problema é que stderr
se perde. stderr
linhas normalmente são listadas entre as stdout
linhas internas less
. Gostaria que eles fossem impressos no console e, quando eu sair less
, para vê-los juntos.
Sei que pode haver nenhuma solução para isso, eu li sobre tee
e multitee
mas sem sorte até agora.
stderr
for redirecionado parastdout
, toda a saída parastderr
será misturada com a saída normal ativadastdout
. A tubulação dessa saídaless
mostrará os dois.less
para repintar a tela.Respostas:
Talvez
Termo aditivo
Segue um esclarecimento para as pessoas que negligenciam ler atentamente a pergunta e que não leram o comentário esclarecedor do OP acima.
haelix apontou:
e, em um comentário para respondentes iniciais, escreveu:
O problema provavelmente é específico de plataforma, é certamente algo que experimentei em plataformas mais antigas do Unix SVR4.
Se, nessas plataformas, você fizer algo como
quaisquer mensagens de erro (por exemplo, permissões de diretório) aparecem assim em menos
para que as linhas de saída sejam obscurecidas por mensagens de erro.
Se você atualizar a página, as linhas de saída serão mostradas corretamente, mas você perderá as mensagens de erro. Quando você sai menos, a tela é limpa, exceto por um prompt de comando.
Se você fizer algo como
As mensagens de erro são misturadas com a saída padrão. Novamente, quando você sai menos, a tela está vazia.
Se você deseja primeiro examinar apenas a saída padrão em menos, e depois ver as mensagens de erro após sair menos, precisará de uma solução diferente.
Era isso que eu tentava sugerir na minha resposta original de duas linhas.
fonte
Você precisa redirecionar
stderr
parastdout
:Verifique o manual do seu shell (por exemplo
man bash
).fonte
basta dizer ao shell para redirecionar o fd 2 para o fd 1 (stderr para stdout)
fonte
Uma coisa que faltava em todas as respostas até agora é a razão pela qual isso está acontecendo. O problema aqui é algum tipo de condição de corrida entre o processo de saída
stderr
eless
exibição de saídastdout
no terminal. Seless
começar a ser exibido depois que toda a saídastderr
tiver sido impressa no terminal, elaless
será preservada e você poderá ver as mensagens depois de sairless
. OTOH, seless
já começou a exibir coisas, as mensagens de erro se misturam comless
a saída de nada e nada é preservado após asless
saídas (porqueless
apenas preserva o terminal como estava antes de começar e não sabe nada sobre as mensagens de erro que vieram no meio).Você pode ver isso facilmente, se, por exemplo,
Todas as mensagens de erro "Permissão negada" se misturam com a
less
saída e nada estará lá depois que você sair. Se você fizertodas (ou pelo menos a maioria) das mensagens de erro foram impressas no terminal antes de
less
ter a chance de exibir a saída e você verá as mensagens de erro posteriormente.Obviamente, você normalmente não deseja esperar 10 segundos antes de iniciar
less
, mas com o Linux também é possível fornecer valores fracionários para o tempo de espera e, com processos de execução rápidos, muitas vezes algo tão pequeno quantosleep 0.1
é suficiente para evitar a condição de corrida. (Mas, é claro, se você quer ou precisa estar do lado realmente seguro, use a solução da RedGrittyBrick).fonte
Você precisa entender o conceito de "descritores de arquivo". Normalmente, um aplicativo unix começa com três descritores de arquivo especiais:
O "tubo"
|
no shell se conectastdout
de um processo aostdin
do seguinte.Os erros, por design, não são alimentados
stdin
no próximo processo. Eles geralmente não fazem sentido para o próximo aplicativo e não devem ser ocultados do usuário.Se você deseja misturar os erros no stdout, pode usar
2>&1
, por exemplo , o que diz essencialmente "anexar stderr ao stdout". Por exemplotambém deve incluir a saída de erro de arquivos inacessíveis.
fornecerá apenas os erros.
fonte
Estou confuso com a sua pergunta, tanto quanto posso dizer que o comportamento desejado é o padrão.
Quando eu uso
para fazer um teste simples,
faz exatamente o que você pede. É isso que eu vejo
dentro
less
equando eu parei
less
fonte
echo info ; echo error 1>&2
) e repita o teste: ambas as linhas são direcionadas para menos.Por acaso, encontrei esse problema em um dos meus Debian 5.0 recentemente. por exemplo, ls abc | menos, acho que a mensagem de erro entra em menos, o que é contra o meu conhecimento.
Após algumas tentativas, descobri que é apenas algo relacionado aos buffers de tela. O stderr NÃO entra menos na verdade. Você pode usar as teclas de seta Para cima ou Para baixo (ou j / k) para demonstrar.
fonte