Назад | Перейти на главную страницу

Как мне запретить GNU Screen сбрасывать мою подсказку?

Когда я запускаю экран, он меняет мою подсказку. Как мне предотвратить такое поведение? Например:

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

Интересно, что на других машинах этого не происходит. Речь идет о Redhat 4 update 4 с версией экрана 4.00.02 (FAU) от 5 декабря 2003 года.

Попробуйте добавить (если его еще нет) в ваш файл .screenrc:

shell -$SHELL

Это даст вам оболочку входа в систему, когда вы инициализируете сеанс экрана или создадите другой терминал из него.

Многие дистрибутивы проверяют тип терминала перед настройкой подсказки. Например, Ubuntu содержит этот маленький драгоценный камень в стандартном .bashrc:

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

Поскольку screen использует свою собственную переменную TERM ("screen"), bash считает, что он не способен отображать необычные цветные подсказки, поэтому по умолчанию выбирает более простое. Экран, конечно, полностью поддерживает те же сложные запросы, что и обычный терминал.

Итак, чтобы переопределить это поведение, просто жестко установите предпочтительные параметры PS1 в конце вашего ~/.bashrc файл. Или, если вы любите приключения, найдите тест, который проверяет значение переменной TERM, и измените его, чтобы он принимал «screen» в дополнение к «xterm-color».

Возможно, это настраиваемая переменная, заданная в файле ~ / .screenrc?

Имелась такая же проблема (больше нет настраиваемого приглашения на экране) на машине с SHELL -$SHELL и нет setenv PS1 в screenrc и нет специального теста для (тупого) терминала в bashrc.

Установка используемого $ TERM:

$ echo $TERM
urxvt-unicode-256color

в screenrc вернул мою пользовательскую подсказку, находясь под экраном:

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

PS: другая учетная запись не нуждалась в этом, но bashrc тестирует dircolors и современный терминал таким образом1:

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

Я считаю, что это тоже работает:

if [ "$TERM" != "dumb" ]; then
PS1=<my fancy prompt>