Alternativa para | mais para exibir resultados de erros página por página

3

O comando

psql -d template_postgis2 -f /usr/share/postgresql/9.1/contrib/postgis-2.1/postgis.sql

retorna uma lista de erros que é muito longa para ser exibida rolando até o início do erro.

Eu tentei o mesmo comando com " | more " e " | less " adicionado no final do comando, mas ele não exibe a mensagem página por página como deveria.

Eu também tentei colocar a saída em um arquivo com " > file.txt " mas eu não entendo neste novo arquivo o que é exibido na tela !!

Eu não entendo o porquê. Eu acho que não posso fazer isso com um comando psql? Existe alguma outra maneira de obter todas as mensagens de erro?

Obrigado pela sua ajuda!

    
por Lane 17.09.2012 / 20:03

3 respostas

4

Os erros que a maioria dos programas imprime são enviados para o fluxo stderr (Erro Padrão), enquanto a saída do programa é enviada para o fluxo stdout (Saída Padrão).

Cada fluxo tem um descritor de arquivo , que você pode considerar como um número que identifica um fluxo. stderr tem o descritor de arquivo 2 e o valor de stdout é 1.

  • Quando você executa
    command > file.txt

isto é equivalente a correr,

    command 1> file.txt

que tem um significado - redireciona o conteúdo de stdout para o arquivo file.txt .

  • No entanto, se você quiser redirecionar o conteúdo de stderr , escreverá:
    command 2> file.txt
  • E para redirecionar os stdout e stderr , você pode escrever:
    command &> file.txt

OR

    command > file.txt 2>&1

Você pode interpretar o segundo comando como - Envie a saída de command para file.txt e também mescle stderr com stdout .

  • Da mesma forma, para enviar erros para less ou more , primeiro mescle stderr para stdout e, em seguida, envie-o para o programa correspoding.
    command 2>&1 | less
    
por green 17.09.2012 / 20:12
2

Se você estiver tentando interceptar a saída do STDERR para mais / menos ou direcionar para um arquivo, é necessário avisar para fazer isso. Simplesmente usando | ou > só pegará STDOUT e não STDERR. Para pegar os dois, você precisa fazer algo como:

psql -d ... 2>1 | less

Isto irá redirecionar STDERR para STDOUT, e então ambos devem aparecer em menos quando você estiver tentando paginar pela saída.

    
por dobey 17.09.2012 / 20:09
0

Acho que o dobey e o green7 têm as melhores respostas para o seu problema em particular, mas, para completar:

Eu posso receber um erro ou uma mensagem que não esperava e não quero executar o comando novamente ou não quero perder tempo. Portanto, sempre que eu instalar um novo sistema operacional, inicio o gnome-terminal, acesse Edit > Preferences- > Scrolling Tab e clique na caixa de seleção de rolagem ilimitada.

Ao usar um console virtual do kernel, você pode rolar para trás com Shift-PageUp.

Ao usar menos | mais ou não usar qualquer um, às vezes acho mais fácil entender as mensagens se eu aumentar a tela do terminal para ser grande o suficiente na horizontal para armazenar a maior parte da mensagem para eliminar a dobra de linha.

    
por John S Gruber 17.09.2012 / 20:22