Мне не нравится, когда все длинные пути к каталогам занимают место на моем терминале, поэтому я обрезаю их с помощью скрипта python. Я отредактировал файл .bashrc и заменил PS1 на
export PROMPT_COMMAND='PS1="$(python /home/vinay/bash_promt.py)"'.
И когда я это делаю, заголовок терминала больше не работает. Он просто отображает Terminal
Что раздражает. Я могу изменить заголовок вручную, выполнив следующую команду в bash:
PROMPT_COMMAND='echo -ne "\033]0;CUSTOM TITLE\007"'
Есть ли способ установить заголовок терминала в соответствии с пользовательским приглашением, которое задается в моем bash?
решение1
Для gnome-terminal заголовок терминала задается с помощью , PROMPT_COMMAND
который определен в /etc/profile.d/vte-2.91.sh
.
PROMPT_COMMAND
, как определено в этом скрипте, выполняет две функции:
изменяет заголовок терминала с помощью escape-последовательности OSC 0 (
\033]0;NEW_TITLE\007
),изменяет представление терминала о текущем каталоге с помощью escape-последовательности OSC 7 (
\033]7;NEW_CURRENT_DIRECTORY\007
, это выносится в__vte_osc7
функцию).
Если вы удалите второй из вашего PROMPT_COMMAND
, ваши вновь открытые окна или вкладки терминала не будут открываться в каталоге, в котором вы находились в предыдущем терминале. Скорее всего, вы этого не хотите.
Таким образом, в скриптах запуска оболочки после поиска источника vte-2.91.sh
вам необходимо создать свой предпочитаемый файл PROMPT_COMMAND
, который задает заголовок аналогично vte-2.91.sh
, и задает текущий рабочий каталог точно так же, как это делается по умолчанию.
Я не знаю ни одного способа сослаться на PS1
разрешенное значение (то есть после подстановки имени пользователя и т. п.) внутри PROMPT_COMMAND
или где-либо еще (не говоря уже о том, чтобы отфильтровать управляющие последовательности, такие как изменение цвета). Если вы хотите видеть одну и ту же строку в приглашении и в заголовке окна, я считаю, что вам нужно продублировать конструкцию этой строки для PS1
и PROMPT_COMMAND
.
решение2
Это вам подойдет
открыть ~/.bashrc
. Найдите строку, которая гласит:
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
Закомментируйте эту строку, поставив #
перед ней символ:
# PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
Теперь добавьте эту строку (возможно, вы захотите поместить ее сразу после закомментированной строки):
PROMPT_COMMAND='echo -ne "\033]0;Custom Name\007"'
ЗаменятьCustom Name
на то, как вы хотите изменить заголовок Терминала.
Надеюсь это поможет.
решение3
Последовательность выхода, которую следует использовать:ESC]2;новое названиеBELгдеЕСКиБЕЛявляются символами escape и звонка. Например \[\e]2;NEWTITLE\a\]
. Используя escape-последовательности #Bash, изменение заголовка в приглашении выглядит так:
export PS1='\[\e]2;new title\a\]prompt > '
ссылка на документ
Вот пример многоцветного усеченного приглашения bash, которое также имеет настраиваемый заголовок терминала:
export PS1='\[\e]2;$PWD\a\]\e[93m$USER\e[97m@\e[90m$HOSTNAME \e[93m$ \e[0m'
В этом примере заголовок терминала всегда будет отражать текущий рабочий каталог ( $PWD
), а приглашение терминала всегда будет выглядеть следующим образом, независимо от того, в каком каталоге вы находитесь: user@hostname $
.
Вы можете заменить $PWD
на CUSTOM TITLE
, чтобы заголовок терминала всегда отображал CUSTOM TITLE
.
Обновлять
Будьте осторожны, когда не оборачиваете непечатаемые символы в \[
и \]
. Это работает без этого, и я делал это без них в течение многих лет. Однако, как я обнаружил сегодня с некоторыми настройками, этоможет вызвать некоторые проблемыв терминале. Ниже приведена более чистая версия с использованием переменных и обертыванием цветовых кодов:
T_YELLOW='\[\e[93m\]'
T_WHITE='\[\e[97m\]'
T_GRAY='\[\e[90m\]'
T_DEFAULT='\[\e[0m\]'
T_TITLE='\[\e]2;$PWD\a\]'
export PS1="${T_TITLE}${T_YELLOW}$USER${T_WHITE}@${T_GRAY}$HOSTNAME${T_YELLOW} $ ${T_DEFAULT}"