Como consertar o shell prompt (ps1) de seqüências de escape ímpares após o login remoto do iTerm2

4

Estou observando o prompt abaixo estranho após o login na minha máquina remota do Ubuntu 14.04. Isso só acontece quando estou usando o terminal gui do ubuntu e não via putty. Alguma sugestão para corrigir isso?

    
por MohanBabu 25.06.2016 / 12:09

5 respostas

3

As strings não são realmente sequências ANSI . Em vez disso, eles começaram como sequências ANSI, mas são traduzidos (devido a algum erro de script) em sua máquina remota para que a maioria dos caracteres seja convertida em uma forma diferente.

Uma sequência ANSI por exemplo teria

escape [ A

possivelmente com um opcional ; antes do A , mas a saída problemática mostra um 133 ( [ é octal 133). Da mesma forma, a captura de tela mostra um literal 3 em vez do caractere de escape ASCII, em vários lugares.

É muito provável que a diferença entre o terminal gui e o putty seja que o primeiro tenha TERM definido como xterm-256color , enquanto o PuTTY tem sua própria configuração e TERM não foi definido no PuTTY (e o padrão é xterm ).

O Ubuntu 14.04 não fez isso sozinho (já faz algum tempo, e ninguém se queixou disso ), então é uma "melhoria" pós-instalação. Como sugerido, comece examinando seus próprios .bashrc (ou scripts de temas coloridos que você adicionou - alguns deles são muito problemáticos).

    
por 25.06.2016 / 19:03
2

Isto parece a integração da shell do iTerm2. Consulte o link .

Verifique se .iterm2_shell_integration.bash está sendo originado por .bash_profile.

    
por 18.01.2017 / 01:03
2

Esta é de fato a integração do iTerm2. Em vez de removê-lo, basta fazer o que os autores do iTerm2 deveriam ter feito em seu script de integração.

Eu tenho ssh'ing via linux e confirmo que minha solução original era insuficiente. Eu

Existe uma sequência ANSI para a qual o iterm responderá, independentemente de qual shell / ssh está ativo. Para as pessoas que querem rolar a sua própria sequência, é printf '\x1b[1337n' . Eu não sei por que o script de integração do shell iterm não faz essa consulta em si e é liberado se não estiver hospedado no iterm.

Seu .bashrc (ou qualquer shell que você inicie) deve ter algo como:

test -r ~/.iterm2_shell_integration.bash && . ~/.iterm2_shell_integration.bash

Possivelmente sem o teste inicial. Basta mudá-lo para um mais feio ainda:

isiterm2.sh && test -r ~/.iterm2_shell_integration.bash && . ~/.iterm2_shell_integration.bash

O script original isiterm2.sh (escrito pelo autor do iTerm2 gnachman pode ser encontrado aqui no github . O link no bloco de cotações incorporado acima é uma modificação desse script original com essas pequenas alterações:

  • Adicione um redirecionamento a dev null em um comando que possa ter saída em alguns casos
  • Mude as sequências de escape para o formato echo -ne \ x para que sejam imprimíveis ascii
  • Bail no Msys bash / git até que eu demore um pouco para descobrir por que a stty está ficando mal-humorada

Esta é a minha resposta incompleta original

[[ $TERM_PROGRAM == "iTerm.app" ]] && test -r ~/.iterm2_shell_integration.bash && . ~/.iterm2_shell_integration.bash

O TERM_PROGRAM é definido pelo Terminal OS X e pelo iTerm2.

    
por 12.05.2017 / 17:14
1

Esses dados parecem muito com seqüências de escape ANSI .

Eles podem ser usados para mudar a cor dos seus personagens, para mudar a barra de título do seu emulador de terminal e muito mais.

Eles trabalham imprimindo esses códigos diretamente na tela e esperando que o emulador de terminal os entenda corretamente.

Alguns (como mudar de cor) são implementados em praticamente todos os emuladores de terminal. Alguns mais exóticos podem ser implementados em apenas alguns emuladores e alguns podem ser feitos apenas para um emulador de terminal específico. (como massa)

Se o emulador de terminal não reconhecer os códigos, ele os ignora e simplesmente imprime "lixo" na tela.

No seu caso, alguém pode ter adicionado códigos específicos de massa. Atualmente, é difícil de ler, qual é exatamente o conteúdo no seu caso.

Dê uma olhada em ~/.bashrc . Muito provavelmente o seu prompt do PS1 está definido lá. Pode dar uma pista, qual é a sua intenção.

Se você quiser apenas se livrar dele, basta configurar seu próprio prompt do PS1 e tudo deve ser bom.

    
por 25.06.2016 / 18:48
0

Isto é devido aos códigos de escape não padrão de Iterm2s: Códigos de Escape Proprietários , que tem foi emitida aqui: A integração do shell exibe caracteres inválidos nos terminais Linux . Para corrigir este problema, execute estes comandos no seu servidor remoto que instalou a integração do iTerm2:

  1. curl https://raw.githubusercontent.com/gnachman/iTerm2/master/tests/isiterm2.sh > ~/.isiterm2.sh && chmod ug+x ~/.isiterm2.sh

  2. Modifique seu .bash_profile (ou .profile ou qualquer outro local) para condicionar o carregamento da integração do shell nesse script.

    ~/.isiterm2.sh && test -e "$HOME/.iterm2_shell_integration.bash" && source "$HOME/.iterm2_shell_integration.bash"

por 27.08.2017 / 07:56