Заголовок вкладки терминала после сеанса SSH

11

В Mac OS X (я на 10.6.8, хотя я полагаю, что другие версии такие же) ssh'ing на удаленном компьютере меняет название текущей вкладки в терминале. Досадно, что когда я отключаюсь от удаленного компьютера, либо явно, exitлибо через тайм-аут, заголовок вкладки не меняется на прежний.

Почти ежедневно это почти заставляет меня страдать от сердечного приступа, когда я печатаю, выполняя ту или иную команду, и только краем глаза вижу, что вкладка все еще называется user @ remotehost. Я осторожный пользователь, который всегда склонен и pwdт. Д. Подтверждать свое местоположение перед тем, как что-либо делать, но все же он застает меня в панике, когда я делаю, DROP DATABASE xи вижу имя удаленного хоста на вкладке.

Короче говоря, есть ли способ отменить этот заголовок при отключении от удаленного хоста, или мне нужно придерживаться открытия новой вкладки при каждом отключении, чтобы сбросить заголовок?

Питер О'Каллаган
источник
имена терминалов также сбрасываются при выходеnpm
Awesome_girl

Ответы:

20

Добавьте PROMPT_COMMANDк своему .bash_profile

export PROMPT_COMMAND="echo -ne '\033]0;${USER}@${HOSTNAME}\007';$PROMPT_COMMAND"

Выполнение PROMPT_COMMANDвыполняется каждый раз, когда отображается приглашение.

Обратите внимание, что мы включаем существующую PROMPT_COMMANDпеременную среды, так что мы не теряем никаких существующих настроек (то есть update_terminal_cwd).

s01ipsist
источник
2
Обязательно добавьте свой код в PROMPT_COMMAND вместо его замены, например PROMPT_COMMAND="<your code>; $PROMPT_COMMAND"; в противном случае вы отключите другие функции, использующие эту переменную. Например, / etc / bashrc использует его для установки текущего рабочего каталога терминала, чтобы терминал мог отображать его и использовать для различных операций.
Крис Пейдж
@ChrisPage Нужен ли новый код раньше, $PROMPT_COMMANDчтобы сохранить другие функции?
reve_etrange
Почему бы не положить его прямо в PS1?
Юнвэй Ву
это как вы редактируете .bash_profile? sublime $HOME/.bash_profile?
Awesome_girl
@Awesome_girl Убедитесь, что sublкоманда установлена, а затем отредактируйте файл с вашего терминала, используя subl ~/.bash_profile. Если этой команды не существует, выполните следующие действия: sublimetext.com/docs/2/osx_command_line.html
XtraSimplicity
2

Чтобы решение @ s01ipsist работало с ZSH (новая оболочка в macOS), вы можете добавить это в ~/.zshrc:

export PROMPT_COMMAND="echo -ne '\033]0;${USER}@${HOST}\007';$PROMPT_COMMAND"
precmd() { eval "$PROMPT_COMMAND" }
Павел Лучивняк
источник
1

Вот что вам нужно вставить в свой .bash_profileфайл. Это намного чище и использует подход, который использует Apple, когда обновляет ваш текущий рабочий каталог. Проверка на наличие переменной update_term_titleуже не является необходимой (как никто не называет bash -- login), а просто присутствует в качестве защиты.

if [ -z "$INSIDE_EMACS" ]; then
    # Update the terminal title on every prompt shown
    update_term_title() {
        # Print user@short-hostname once SSH quits.
        echo -ne "\033]0;${USER}@${HOSTNAME%%.*}\007"
        # Or ${HOSTNAME} if short host names aren't your taste
        # Or echo -ne "\033]0;\007" if you don't want anything.
    }
    # Check to see if update terminal title is present?
    if ! echo $PROMPT_COMMAND | grep -q update_term_title
    then
       # This function is not found in PROMPT_COMMAND, add it
       PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }update_term_title"
    fi
fi
zapstar
источник
1
Lol, я задавался вопросом, кто написал этот ответ ... оказывается, это был я :-)
zapstar