Назва вкладки терміналу після сесії SSH


11

У Mac OS X (я перебуваю на 10.6.8, хоча я вважаю, що інші версії такі самі) ssh'ing на віддаленій машині змінює назву поточної вкладки в Terminal. Прикро, коли я відключаюсь від віддаленої машини, явно з 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).


2
Не забудьте додати свій код до PROMPT_COMMAND, а не замінювати його, наприклад PROMPT_COMMAND="<your code>; $PROMPT_COMMAND",; інакше ви відключите інший функціонал, який використовує цю змінну. Наприклад, / etc / bashrc використовує його для встановлення поточного робочого каталогу терміналу, щоб Terminal міг відображати його та використовувати його для різних операцій.
Кріс Пейдж

@ChrisPage Чи потрібен новий код, $PROMPT_COMMANDщоб зберегти інші функції?
reve_etrange

Чому б не помістити його безпосередньо в PS1?
Yongwei Wu

це ти редагуєш .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

1
Лол, я цікавився, хто написав цю відповідь ... виявляється, це я :-)
Запстар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.