Shell Prompt Issue quebra de linha
-
16-09-2019 - |
Pergunta
Eu fiz algo para quebrar a minha Bash Shell Prompt no OS X (10.5.7) Terminal.
Este é o PS1 que eu tinha configurado:
PS1='\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\$ '
Tanto quanto eu posso dizer que tenho os comandos cor escapar corretamente. No entanto, quando eu rolar para cima e para baixo no meu histórico de comandos muitas vezes eu recebo questões a quebra de linha se os comandos históricos embrulhar em várias linhas.
Eu simplificado minhas instruções para o seguinte:
PS1='\[\e[1m\]\h:\w\$ \[\e[0m\]'
PS2='> '
E eu ainda ver algo como:
localhost:~/Library/Application Support/Firefox/Profiles/knpmxpup.Defau lt/extensions/{1A2D0EC4-75F5-4c91-89C4-3656F6E44B68}$ expocd \{1A2D0EC4-7 5F5-4c91-89C4-3656F6E export PS1="\[ \e[1;32m\]\h\[\e[0m\]: cd Library/Appl ication\ Support/
Eu também tentei \033
vez de \e
. Eu só incluiu PS2 até lá para informação, eu não mudaram a partir da instalação padrão. Se eu remover completamente os códigos de cores, em seguida, tudo funciona bem, todas as idéias?
Solução
questões quebra de linha em Bash são nada de novo. Consulte o Mailinglist, talvez haja ainda um outro bug sobre isso.
Você não pode fazer muito mais do que marcar caracteres não imprimíveis, o resto deve ser feito pelo código avisar.
Outras dicas
Agora estou usando este PS1 com um bom efeito:
green=$(tput setaf 2)
blue=$(tput setaf 4)
bold=$(tput bold)
reset=$(tput sgr0)
PS1="\[$green$bold\]\h\[$reset\]:\[$blue$bold\]\w\[$reset\]\$ "
Scrolling através do meu histórico de comando parece wraps linha alça agora. No entanto, enquanto isso uma vez que esta pergunta foi feita Eu também atualizei meu OS X 10.6.3 para
Esta discussão stackoverflow parece relevante. Como alguém observou nesse segmento, o Bash FAQ em mywiki.wooledge.org discute como citar corretamente os códigos de cores em prompts Bash ( FAQ 53 ), e a invocação apropriada das cores dos terminais ( FAQ 37 ).
Parece que você tenha corretamente escapou e seqüências fechado.
Uma solução que eu uso qualquer maneira para adicionar um '\ n' no final. Acho que é mais clara e diminuir qualquer problema com problemas de acondicionamento. O fim exato da minha PS1 é:
'\n\[\033[0;30m\]$\[\033[0m\]
Um excelente howto você provavelmente já sabe:
Aqui é minha: é o melhor que eu encontrei, mas o local onde eu originalmente achei que estava faltando um caractere de escape, levando à questão a quebra de linha. I consertou com ele e, finalmente, tenho que trabalhar. Ela mostra o seu usuário, caminho, e informações ramo com bom contraste, cor-wise.
export PS1='\[\e[1;37m\]\[\e[1;32m\]\u\[\e[0;39m\]:\[\e[1;33m\]\w\[\e[0;39m\]\[\e[1;35m\]$(__git_ps1 " (%s)")\[\e[0;39m\] \[\e[1;37m\]|\[\e[0;39m\]\$'
Além disso, adicionar
GIT_PS1_SHOWDIRTYSTATE=true
Para mostrar um marcador quando um ramo é "sujo" (alterações sejam comprometidos existe)
export HISTCONTROL=ignoredups
Também é útil para ignorar duplicatas ao deslocar-se através da história bash.
bind "set completion-ignore-case on"
também ajuda.
Por fim,
shopt -s checkwinsize
Pode ser útil no OSX se os problemas persistirem.
notei que existem alguns problemas com o posicionamento do cursor pronta mesmo se não há nenhum carácter especial na variável PS1
ou ambiente PROMPT
.
Se a saída de um arquivo que não têm um carácter de fim de linha no final. Ele irá confundir o prompt.
Você pode reproduzir este fazendo:
curl https://gist.githubusercontent.com/martinos/d4aa0a7d4d752b0d0d9f/raw/3198c39f84a080c44227a084a19fb3a0bb661ee5/wrapping_issue.txt
e pressionar a tecla para cima várias vezes e você verá que o prompt de ficar confuso.
Você pode ver um exemplo disto em ação:
https://asciinema.org/a/9mtjhi9dib6md4ocsbw210cca
Quando isso ocorre, basta pressionar <CTRL-C>
eo prompt vai voltar ao normal.
Note que zshell não tem esse problema.
Para referência futura, isso é o que eu uso:
export PS1="\[\033[0;31m\][\u@Project:\w]$\[\033[0m\] "
Este seria exibido minha concha alerta como:
[ec2-user@Project:~]$
Me ajuda a distinguir entre os sites ao vivo e dev.
'shopt -s checkwinsize' também funciona para problemas envoltório Cygwin também
Se você estiver usando a barra de título truque "\e]2;titlebar\a"
, certifique-se de escapar isso também: "\[\e]2;titlebar\a\]"