Mostra a saída em outra “tela” e retorna ao normal quando terminada

7

Eu quero um comportamento semelhante ao uso de less vim nano etc.

Isso é possível de se conseguir com o bash?

    
por Tyilo 30.12.2011 / 00:44

4 respostas

8

Se o emulador de terminal for compatível, você poderá fazer isso usando o mesmo mecanismo usado por less , vim , et al, ou seja, os recursos ti e te termcap ( smcup e rmcup no terminfo mais moderno). Eles mudam da tela primária para a secundária e de volta para a principal, respectivamente.

Se o seu sistema tiver o comando tput , você poderá usar:

tput smcup # switch to secondary screen
...
tput rmcup # switch back to primary screen

Caso contrário, para xterm e provavelmente para a maioria dos outros emuladores de terminal,

printf '\e[7\e[?47h'

deve mudar para a tela secundária e isso:

printf '\e[2J\e[?47l\e8'

deve voltar para o primário (e colocar o cursor de volta onde estava).

tcsh tem um comando echotc integrado, então você pode fazer:

tcsh -c 'echotc ti'
...
tcsh -c 'echotc te'

(ou apenas use echotc diretamente se você estiver usando o tcsh).

    
por 30.12.2011 / 02:49
3

Isso é chamado de "tela alternativa" (e como o t o p google hits show, você é incomum em gostar desse recurso). Alguns terminais suportam dois buffers de tela, um usado por aplicativos de tela inteira, o outro usado por aplicativos orientados a linha. Bash não sabe nada sobre eles. Se um comando simplesmente emitir saída para o terminal, você pode usar sequências de controle de terminal para alternar para a tela secundária e vice-versa (esses comandos estão documentados em xterm ctlseqs ).

printf '\e[?47h'; mycommand; printf '\e[?47l'

Observe que não há rolagem para a tela alternativa, portanto, você verá apenas a última tela cheia de saída. Se isso é um problema, apenas faça o seguinte:

mycommand | less 

Existem apenas dois buffers de tela. Se você quiser mais, use um multiplexador de tela apropriado, como Tela ou Tmux .

    
por 30.12.2011 / 03:06
0

Bash não sabe nada sobre telas (pode ser executado sem ser visto, na verdade). Você pode redirecionar a saída padrão e o erro padrão para qualquer arquivo ou pipe.

    
por 30.12.2011 / 02:02
0

Nenhuma das respostas atuais parecia funcionar na minha máquina, mas descobri o comando chamado screen , que parece fazer o truque para mim.

    
por 31.12.2011 / 04:23

Tags