Lidando com comandos de shell que descartam a saída antiga

2

Existem vários comandos shell que descartam a saída antiga. Um casal que eu vi são Nose e Hudson. O que quero dizer é que quando o programa é executado, ele produz uma grande quantidade de saída textual no shell, mas quando você rola para cima, você não consegue ver a saída antiga, apenas os comandos que você usou antes você até digitou o comando original.

Isso está me deixando louco, porque informações importantes estão sendo engolidas. Como faço para que esses programas parem de fazer isso?

    
por Ram Rachum 21.01.2011 / 09:23

2 respostas

0

O método que funcionou para mim é fazer isso:

my_command my_args >log 2>&1

Que armazena todas as saídas em um arquivo chamado log .

Então, em uma janela de shell separada, eu faço isso:

tail -f log

Que mostra o arquivo de log como my_command está escrevendo nele.

    
por 23.01.2011 / 23:11
2

Esse tipo de coisa é geralmente o resultado de um programa que manipula o terminal diretamente e move o cursor por conta própria. Por exemplo, é isso que editores como o VI fazem - se você tentar rolar o shell de volta após uma sessão do vi, você só verá o texto na última página da saída do vi, e não qualquer outra coisa que você tenha paginado.

Formas de lidar com isso:

  • Use uma ferramenta como a tela (1) e ative o log ( ctrl-A H ). Então você pode rever o log mais tarde. Isso pode mostrar mais informações úteis.
  • Tente usar o tee (1) para capturar a saída enquanto ela passa com command | tee output.txt
  • Determine como desabilitar qualquer modo de saída sofisticado no programa que você está executando e forçá-lo a emitir texto simples.

Para esse último, há algumas coisas que você pode tentar. Primeiro, olhe os argumentos para o comando e veja se há algo como -nostty ou qualquer coisa falando sobre dumb terminals .

Você também pode tentar forçar o programa a pensar que está em um terminal idiota assim:

TERM=dumb command

(assumindo o bash shell) e isso pode fazer o programa pensar que está rodando em um terminal burro e fazer com que ele retorne para a saída de texto direto.

Você também pode tentar alimentar o programa com alguma entrada e isso pode ativar o modo de saída de texto simples:

echo blarg | command

ou talvez

echo blargh | command -

se o programa tiver - como uma indicação para ler a partir de stdin.

De qualquer forma, experimente essas ideias e você deve encontrar uma maneira de obter saída de texto direto das ferramentas que está usando.

    
por 21.01.2011 / 09:34

Tags