Jak sprawić, aby OS X ustawił tytuł terminalu z powrotem na oryginalny, gdy wracam z ssh?

12

Począwszy od OS X, ssh do foo (Linux). Mój tytuł terminala zmienia się na foo. Następnie ssh do baru (kolejne okno Linuksa). Mój tytuł terminala zmienia się na pasek. Wylogowuję się z baru. Mój tytuł terminala zmienia się na foo. Wylogowuję się z foo. Mój tytuł terminala pozostaje foo (zamiast wracać do pierwotnego tytułu). Problem oczywiście nie dotyczy terminala, ponieważ działa on poprawnie po wylogowaniu się z Linux-a z powrotem do Linux-a. Prawdopodobnie nie jest to ssh, ponieważ mam ten sam problem z vimem. W mojej głowie to opuszcza muszlę. Używam BASH. Patrząc przez środowisko, nie widzę dużej różnicy między pudełkiem Linuksa a moim pudełkiem OS X. Oba używają TERM Xtermu.

Chas. Owens
źródło

Odpowiedzi:

14

Dodawanie

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

do mojego .bash_profilenaprawiłem problem.

Wygląda na to, że ciąg znaków PROMPT_COMMANDjest wykonywany za każdym razem, gdy wyświetlany jest monit. Ze strony podręcznika:

PROMPT_COMMAND

Jeśli jest ustawiony, wartość jest wykonywana jako polecenie przed wydaniem każdego głównego monitu.

Chas. Owens
źródło
3
Jest mało prawdopodobne, aby zalogować się do OS X za pośrednictwem konsoli, ale może się zdarzyć. Aby uniknąć problemów w takim przypadku, zawijam to wszystko w pewien case "$TERM" in xterm*|rxvt*)rodzaj umowy. Myślę, że pierwotnie wpadłem na pomysł tutaj: tldp.org/HOWTO/Bash-Prompt-HOWTO/…
Telemachus
Och, również uważam, że lepiej jest przejść do preferencji Terminal.app (Preferencje -> Ustawienia -> Okno) i usunąć wszystko, co próbuje dodać do paska tytułu, ale ymmv.
Telemachus
Dobrze, używam iTerm.appnie Terminal.app, i to działa. Masz rację na temat prawdziwego terminala. Moje pudełko z Linuksem ma właśnie taki czek, więc dodam go do mojego profilu, dzięki.
Chas. Owens
0

Znalazłem lepsze rozwiązanie tego problemu. OSX używa tej konfiguracji całego systemu:

PROMPT_COMMAND="update_terminal_cwd${PROMPT_COMMAND:+; $PROMPT_COMMAND}"

Funkcja update_terminal_cmdjest zadeklarowana w /etc/bashrc_Apple_Terminal. Dlatego jeśli nie chcesz zerwać ustawień terminalu przez resetowanie PROMPT_COMMAND, możesz dodać te linie na końcu swojego ~/.profilelub ~/.bashrc:

my_update_terminal_cwd() {
    update_terminal_cwd # call system wide function
    printf '\e]0;\a'    # reset additional title after SSH session
}

PROMPT_COMMAND="my_update_terminal_cwd${PROMPT_COMMAND:+; $PROMPT_COMMAND}"

Przykład:

Przed sesją SSH

Trwa sesja SSH - tytuł ustawiony na zdalną nazwę hosta

Po sesji SSH - tytuł naprawiony

Mike Miklin
źródło