Como eu evito que o GNU Screen redefina meu prompt? [fechadas]

13

Quando executo a tela, ela muda meu prompt. Como evito esse comportamento? Por exemplo:

$ echo $PS1
\[\e]0;\h:Prod\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$
$ screen
$ echo $PS1
[\u@\h \W]\$

Curiosamente, isso não acontece em outras máquinas. A máquina em questão é a atualização 4 do Redhat 4, com a versão 4.00.02 (FAU) 5-Dec-03.

    
por Swoogan 23.07.2009 / 19:17

4 respostas

15

Tente adicionar (supondo que ainda não esteja lá) ao seu arquivo .screenrc:

shell -$SHELL

Isso lhe dará um shell de login quando você inicializar uma sessão de tela ou criar outro terminal a partir de um.

    
por 23.07.2009 / 19:34
2

Muitas distribuições verificam o tipo de terminal antes de definir o prompt. O Ubuntu, por exemplo, contém essa pequena joia no padrão .bashrc:

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color) color_prompt=yes;;
esac

Como a tela usa sua própria variável TERM ("screen"), o bash acha que não é capaz de exibir um prompt de cores sofisticado, por isso, o padrão é mais simples. É claro que a tela é totalmente capaz dos mesmos prompts complexos que um terminal normal.

Portanto, para substituir esse comportamento, apenas defina suas opções preferidas do PS1 no final do arquivo ~/.bashrc . Ou, se você estiver se sentindo aventureiro, encontre o teste que verifica o valor da variável TERM e modifique-o para aceitar "screen" além de "xterm-color".

    
por 23.07.2009 / 19:44
1

Talvez seja uma variável personalizada definida no arquivo ~ / .screenrc?

    
por 23.07.2009 / 19:29
0

Teve o mesmo problema (não há mais prompt personalizado na tela) em uma máquina com SHELL -$SHELL e não setenv PS1 no screenrc, e nenhum teste especial para terminal (burro) no bashrc.

Definindo o $ TERM usado:

$ echo $TERM
urxvt-unicode-256color

no screenrc recebi meu aviso personalizado de volta na tela:

- #term xterm-256color
+ term urxvt-unicode-256color

PS: outra conta não tinha necessidade disso, mas testes de bashrc para dircolors e um terminal moderno dessa forma 1 :

if [[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] ; then
PS1=<my fancy prompt>

Eu acredito que isso também funciona:

if [ "$TERM" != "dumb" ]; then
PS1=<my fancy prompt>
    
por 11.04.2015 / 16:31