Eu executo um comando incorreto sobre ssh:
watch /bin/df | grep _23
Agora eu executo um comando como env
e recebo isso:
LC_TERMINAL_VERSION=3.3.4
LC_TERMINAL=iTerm2
LC_CTYPE=en_US.UTF-8
LC_COLLATE=en_US.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_ALL=en_US.UTF-8
SHELL=/usr/bin/zsh SSH_TTY=/dev/pts/26
TERM=xterm-256color
DISPLAY=localhost:16.0
XDG_SESSION_ID=18040
XDG_RUNTIME_DIR=/run/user/1000
SHLVL=1
Parece que o separador de linha de saída é um avanço de linha, mas não um retorno de carro.
Mas não tenho certeza se isso só acontece por ssh. Acho que já vi esse comportamento depois de usar vim
também.
Por que isso acontece e qual é a maneira mínima de redefini-lo? Eu costumo correr, source ~/.zshrc
mas isso é um exagero.
É bem conhecido que Unix, Linux e outros sistemas do tipo Unix usam um único caractere para representar o final de uma linha de texto (EOL). Esse caractere é chamado de Newline e geralmente é representado como
\n
. Isso é um pouco confuso, pois a maioria dos terminais de software (por exemplo,xterm
) e teletipos de hardware requerem dois caracteres de controle para avançar para uma nova linha: um Retorno de carro (CR) para mover o cursor (ou cabeça de impressão) para a margem esquerda e um Feed (LF) para mover o cursor uma linha para baixo sem mover horizontalmente (ou rolar a janela para cima ou enrolar o papel para cima). (O fato de Newline e LF serem numericamente o mesmo valor de byte aumenta a confusão.)Sistemas do tipo Unix lidam com isso traduzindo
\n
para CR + LF na saída do driver TTY. No entanto, você pode nem sempre querer que isso aconteça. Em particular, você não quer que isso aconteça se estiver se conectando a um sistema não-Unix via ssh. Evim
não quer que isso aconteça; gosta de poder usar Newline como Cursor Down. Portanto, esse comportamento é opcional e programas como ssh evim
desativá-lo. (Eles devem reativá-lo ao sair, mas às vezes as coisas não funcionam corretamente, por exemplo, se um programa for interrompido.)Como a maioria das opções de driver TTY, isso é controlado por
stty
. A opção é chamadaonlcr
, que significa
Se você fizer issona saída , quando você vê uma nova linha , também produza um CR
stty -a
(para ver todas as configurações do stty), você veráonlcr
(pode estar perto do início da penúltima linha). Se você fizer issostty -a
quando estiver no estado estranho, verá-onlcr
, indicando que a opção está desativada.A solução simples para esse problema específico é digitar
stty onlcr
para ativar a opção novamente. Mas esse é um inicialismo obscuro que pode ser difícil de lembrar. Além disso, se o programa (por exemplo, ssh ouvim
) mexeu com as configurações do stty, ele pode ter mexido com outras que não são tão óbvias. Há um comando fácil de lembrar para definir todas as configurações do stty de volta aos valores normais; isso éComo jhufford aponta , alguns sistemas possuem um
reset
comando que também faz isso.