Como resolver o problema de uma tela do Terminal estar bagunçada? (geralmente após um redimensionamento)

76

Às vezes, uma tela do terminal fica desarrumada e, quando usamos man lsas páginas de manual, ou pressione a seta para cima para acessar os comandos anteriores da história, a tela mostrará os caracteres que não estão no lugar certo. (por exemplo, trate o final da tela como em algum lugar no meio da tela).

O comando reseté tentado e não funcionaria. Uma maneira que funciona é sair ou fechar a janela e redimensioná-la primeiro e, em seguida, fazer ssh(ou fechar essa guia e redimensionar a janela e abrir uma nova guia para obter um novo shell).

Mas, dessa forma, perderemos tudo o que fizemos anteriormente, como iniciar um console de máquina virtual etc. Então, se não fecharmos o shell, existe uma maneira de corrigir esse problema?

(isso aconteceu antes dentro do Fedora e também para um Macbook sshna caixa RHEL 5.4).

Atualização: Lembro-me agora de como aconteceu no Fedora: abri um terminal e fiz um FreeVM para usar o console de uma máquina virtual (shell). Eu acho que era tamanho 80 x 25 e depois de um tempo, redimensionei o Terminal para 130 x 50 aproximadamente e, em seguida, o "shell interno" (da VM) começou a se comportar de maneira estranha).

nopole
fonte
Qual emulador de terminal você está usando? Parece quebrado se resetnão resolver o problema.
Jordanm
qualquer programa Terminal dentro do Fedora ... e o programa Terminal padrão no Mac OS X Lion.
Nopole
Por favor, veja a atualização acima para saber como aconteceu no Fedora
nopole
3
O encantamento mágico é ^Jreset^J, onde ^Jsignifica pressionar ctrl-J. Ou (em terminais gráficos), você pode tentar o Resetbotão. Além disso, alguns programas simplesmente não estão preparados para alterar os tamanhos dos terminais sob eles (sim, o software antigo está ativo e funcionando) ou apenas se comportam mal quando o terminal fica muito pequeno.
precisa saber é o seguinte
1
Meus problemas surgiram do bash, calculando mal o comprimento do prompt, porque ele tinha códigos de cores; Estava faltando os caracteres de escape \ [e \] - consulte unix.stackexchange.com/questions/105958/…
qneill

Respostas:

93

Se você estiver usando o bash, verifique se a opção "checkwinsize" está ativada na sua sessão usando

shopt | grep checkwinsize

Se você não receber

checkwinsize    on

depois ative-o com

shopt -s checkwinsize

A documentação do Bash diz para o atributo "checkwinsize":

"Se definido, o Bash verifica o tamanho da janela após cada comando e, se necessário, atualiza os valores de LINES e COLUMNS."

Se você gosta da configuração, pode ativar checkwinsizeno seu ~/.bashrc.

  • Ativar: shopt -s checkwinsize
  • Para desativar: shopt -u checkwinsize
Arcadien
fonte
6
Isso não resolve o meu problema, mas esta é uma boa resposta geral; portanto, marque com +1. Eu acho que meu problema está relacionado à emulação do Windows (?) Ao fazer o ssh em um servidor Linux.
geneorama
A princípio, parecia que não funcionava quando usei as setas para ver o histórico, mas logo após o primeiro comando executado, tudo foi corrigido. Usando terminator no meu caso. Obrigado +1
kstenger
isso funcionou para mim, mas apenas desativando checkwinsize. por algum motivo, LINES = 24 estava sendo definido após cada comando, mesmo que minha janela (contendo uma sessão de picocom) fosse muito mais alta.
Michael
19

Você pode tentar Ctrl+ L. Limpa e / ou redesenha a tela do terminal, dependendo do programa.

BlueBomber
fonte
3
mas isso não resolve o problema permanentemente ...
nopole
Eu acho que eu quis dizer foi, se você pressionar CTRL L, em seguida, a linha é ok para o momento, mas se você editar a linha novamente (ou na linha de comando ao lado você digita), então o problema ainda está lá
nopole
11

adicionar essas opções ao docker exec parecia resolver meu problema

-e COLUMNS=$COLUMNS -e LINES=$LINES -e TERM=$TERM
Oran Agra
fonte
1
você foi quem fez a pergunta há 5 anos?
Archemar 15/03
3
Posso dizer que ele não é: "docker" não se encaixa com "5 anos atrás". Docker ainda não foi lançado em janeiro de 2013 ;-)
jplandrain
8

Eu tive o mesmo problema e nenhuma das receitas acima funcionou para mim porque acredito que meu bash nunca recebe os SIGWINCHsinais, que são capturados pelo processo pai.

Finalmente encontrei uma solução. Eu adicionei ao meu .bashrc:

export PROMPT_COMMAND="resize &>/dev/null ; $PROMPT_COMMAND"

Agora, toda vez que recebo um novo prompt, minha janela é reajustada.

Agradecemos a UKmonkey pela melhoria de PROMPT_COMMAND.

Anthony Scemama
fonte
2
Eu, pessoalmente, iria com export PROMPT_COMMAND="resize &>/dev/null; $PROMPT_COMMAND"para que o velho prompt de comando, o que quer que o meu ser será preservada
UKMonkey
Eu apenas executaria o redimensionamento manualmente quando necessário. Interrogar o console pelo tamanho pode ser lento. Ao fazê-lo, todos os comandos parecem excessivos e geralmente você sabe quando foi redimensionado.
Conrad Meyer
6

Eu só queria acrescentar o que Arcadien já havia mencionado. A ativação do tamanho do tamanho de verificação faz o truque, mas, para mim, era necessário redefinir o tamanho da janela para que funcionasse corretamente. Eu acho que o tamanho do cheque foi feito para eliminar isso, mas ainda assim, vale a pena tentar. Apenas tente alterar o tamanho da janela ou não maximizá-lo e maximizá-lo postar esta opção.

saketrp
fonte
1
Acredite ou não, isso foi o suficiente para que o meu fosse consertado. Engraçado porque tentei de tudo primeiro.
Taranaki
4

De vez em quando, enfrento o mesmo problema usando o zsh no macOS. Uma simples chamada de resetcomando configura o terminal ao meu gosto novamente.

não cortada
fonte
Assim, o OP mencionou que resetnão estava trabalhando para eles, e isso foi de fato o ponto da questão ....
Stephen Rauch
A OP mencionou que não funciona nos sabores do Linux. Eu enfrentei o problema no MacOS Sierra e resettrabalhei nesse caso. Adicionei esta resposta para ajudar qualquer pessoa que enfrenta o mesmo problema em um MacOS e não esteja ciente do resetcomando.
Nonocut #
resetfunciona no Windows Putty com Ubuntu 16.04!
Musck
O reset funcionou no ubuntu 16.04 zsh
A.Wan
2

Eu tive o mesmo problema que você e foi o que fiz:
tenho uma .profileconfiguração no meu usuário, e é aí que faço todas as minhas alterações.

Existe um pacote chamado xtermque está disponível através do qual apt-geteu não conheço yum. Mas fiz uma instalação local a partir da fonte, pois não tenho privilégios de instalação. LINK: http://invisible-island.net/xterm/#download

./configure --prefix=/the/path/you/want/to/install/to
make
make install

Eu exportei o caminho no meu perfil e o invoquei no mesmo local

export PATH=$PATH:/the/path/you/want/to/install/to
resize

Então agora, toda vez que eu faço login, o tamanho do terminal é definido de acordo com o redimensionamento.

FoldedChromatin
fonte
1

Bem, isso é um problema comum e deve haver uma solução simples.

Se outras medidas como Ctrl + A Ctrl + L não funcionarem, tente usar stty:

  1. Ctrl + T: abre uma nova guia com um shell local.
    Ou: saia da tela (Ctrl + AD para desanexar) e efetue logout da sua sessão SSH.
  2. stty -a | grep rows: Obtenha o número de linhas e colunas.
    Exemplo:speed 38400 baud; rows 33; columns 133; line = 0;
  3. Volte para a guia remota ou faça login e reconecte a tela. A sttysaída deve ser diferente.
    Exemplo:speed 38400 baud; rows 47; columns 177; line = 0;
  4. Digite stty rows Ne stty columns Nonde N é o número "real" (fora da tela). Exemplo:$ stty rows 33; stty columns 133

Se você usa o Terminator , pode pular as três primeiras etapas, pois mostra o número de colunas e linhas na parte superior.

Você não precisa redimensionar a janela do seu terminal para encontrar isso. Os administradores geralmente fazem login em computadores diferentes e, quando os monitores conectados diferem em tamanho (resolução), uma janela maximizada terá um tamanho diferente em cada computador. Na verdade, é bastante difícil não encontrar isso com frequência.

E o resultado não é apenas que algumas páginas de manual não estão aparecendo corretamente. É praticamente qualquer coisa que usa um pager - as primeiras linhas geralmente estão ausentes (por exemplo). E nem pense em usar o VIM em um terminal tão desalinhado. Você deseja destacar a linha 3 (V) para substituí-la, mas quando o fizer, o texto destacado será o de outra linha.

basic6
fonte
O CentOS não parece ter redimensionamento - use "stty lines 66" para fazer o truque.
Russ
0

Tente stty sane. deve fazer o que você precisa.

phil294
fonte