Tytuł zakładki terminala po sesji SSH

11

W Mac OS X (korzystam z wersji 10.6.8, chociaż uważam, że inne wersje są takie same) ssh'ing na maszynie zdalnej zmienia tytuł bieżącej karty w Terminalu. Irytujące jest to, że gdy rozłączam się ze zdalnym komputerem, albo z wyraźnym exitprzekroczeniem limitu czasu, tytuł karty nie zmienia się z powrotem na taki, jaki był.

Prawie codziennie powoduje to prawie zawał serca, kiedy piszę na klawiaturze, wykonując jakieś polecenie, ale tylko kątem oka widzę, że karta nadal nosi nazwę użytkownik @ zdalny host. Jestem ostrożnym użytkownikiem, który zawsze ma tendencję do pwdpotwierdzania mojej lokalizacji przed zrobieniem czegokolwiek, a mimo to wpada w panikę, kiedy to robię DROP DATABASE xi widzę nazwę zdalnego hosta na karcie.

Krótko mówiąc, czy istnieje sposób na przywrócenie tego tytułu po odłączeniu od zdalnego hosta, czy też muszę trzymać się otwierania nowej karty za każdym razem, gdy się rozłączam, aby zresetować tytuł?

Peter O'Callaghan
źródło
nazwy terminali również resetują się po npm
wyjściu

Odpowiedzi:

20

Dodaj PROMPT_COMMANDdo swojego .bash_profile

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

PROMPT_COMMANDPobiera wykonywane za każdym razem, gdy zostanie wyświetlony monit.

Pamiętaj, że uwzględniamy istniejącą PROMPT_COMMANDzmienną środowiskową, tak aby nie utracić żadnych istniejących ustawień (tj update_terminal_cwd.).

s01ipsist
źródło
2
Pamiętaj, aby dodać kod do PROMPT_COMMAND zamiast go zastępować, np PROMPT_COMMAND="<your code>; $PROMPT_COMMAND".; w przeciwnym razie wyłączysz inne funkcje korzystające z tej zmiennej. Na przykład / etc / bashrc używa go do ustawienia bieżącego katalogu roboczego terminala, aby Terminal mógł go wyświetlić i używać go do różnych operacji.
Chris Page
@ChrisPage Czy nowy kod musi być wcześniejszy, $PROMPT_COMMANDaby zachować inne funkcje?
seek_etrange
Dlaczego nie umieścić go bezpośrednio na PS1?
Yongwei Wu
czy w ten sposób edytujesz .bash_profile? sublime $HOME/.bash_profile?
Awesome_girl
@Awesome_girl Upewnij się, że sublpolecenie jest zainstalowane, a następnie edytuj plik za pomocą terminala subl ~/.bash_profile. Jeśli to polecenie nie istnieje, wykonaj następujące czynności: sublimetext.com/docs/2/osx_command_line.html
XtraSimplicity
2

Aby rozwiązanie @ s01ipsist działało z ZSH (nowa powłoka na macOS), możesz dodać to do ~/.zshrc:

export PROMPT_COMMAND="echo -ne '\033]0;${USER}@${HOST}\007';$PROMPT_COMMAND"
precmd() { eval "$PROMPT_COMMAND" }
Pavel Lučivňák
źródło
1

Oto, co musisz wkleić do .bash_profilepliku. Jest to o wiele czystsze i przyjmuje podejście, które robi Apple, gdy aktualizuje bieżący katalog roboczy. Sprawdzenie, czy zmienna update_term_titlejest już obecna, nie jest tak naprawdę konieczne (jak nikt nie woła bash -- login), ale tylko jako ochrona.

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
źródło
1
Lol, zastanawiałem się, kto napisał tę odpowiedź ... okazuje się, że to ja :-)
zapstar