Titolo della scheda Terminale dopo la sessione SSH


11

In Mac OS X (sono su 10.6.8, anche se credo che le altre versioni siano uguali), lanciarlo su una macchina remota cambia il titolo della scheda corrente in Terminale. Stranamente, quando mi disconnetto dal computer remoto, esplicitamente con exito tramite un timeout, il titolo della scheda non cambia più a quello che era.

Quasi quotidianamente, questo mi fa quasi venire un infarto, quando scrivo eseguendo un comando o altro, solo per vedere con la coda dell'occhio che la scheda è ancora chiamata user @ remotehost. Sono un utente cauto che tende sempre ad pwdecc per confermare la mia posizione prima di fare qualsiasi cosa, eppure mi sorprende in un momento di panico quando lo faccio DROP DATABASE xe vedo il nome dell'host remoto nella scheda.

Per farla breve, c'è un modo per ripristinare questo titolo quando mi disconnetto da un host remoto, o devo continuare con l'apertura di una nuova scheda ogni volta che mi disconnetto, per ripristinare il titolo?


i nomi dei terminali si resettano anche quando escinpm
Awesome_girl il

Risposte:


20

Aggiungi a PROMPT_COMMANDal tuo .bash_profile

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

Il PROMPT_COMMANDViene eseguito ogni volta che le è veloce visualizzati.

Si noti che includiamo la PROMPT_COMMANDvariabile di ambiente esistente , in modo tale da non perdere alcuna impostazione esistente (ad es update_terminal_cwd.).


2
Assicurati di aggiungere il tuo codice a PROMPT_COMMAND anziché sostituirlo, ad esempio PROMPT_COMMAND="<your code>; $PROMPT_COMMAND"; in caso contrario, disabiliterai altre funzionalità che utilizzano questa variabile. Ad esempio, / etc / bashrc lo usa per impostare l'attuale directory di lavoro del terminale in modo che Terminal possa visualizzarlo e usarlo per varie operazioni.
Chris Page

@ChrisPage È necessario che il nuovo codice venga prima $PROMPT_COMMANDper conservare le altre funzionalità?
reve_etrange,

Perché non inserirlo direttamente in PS1?
Yongwei Wu,

è così che si modifica il .bash_profile? sublime $HOME/.bash_profile?
Awesome_girl,

@Awesome_girl Assicurati che il sublcomando sia installato, quindi modifica il file dal tuo terminale usando subl ~/.bash_profile. Se questo comando non esiste, segui questo: sublimetext.com/docs/2/osx_command_line.html
XtraSimplicity

2

Per far funzionare la soluzione di @ s01ipsist con ZSH (nuova shell su macOS), è possibile aggiungere questo a ~/.zshrc:

export PROMPT_COMMAND="echo -ne '\033]0;${USER}@${HOST}\007';$PROMPT_COMMAND"
precmd() { eval "$PROMPT_COMMAND" }

1

Ecco cosa dovrai incollare nel tuo .bash_profilefile. Questo è molto più pulito e adotta l'approccio di Apple quando aggiorna la tua directory di lavoro corrente. Il controllo per la variabile update_term_titleè già presente non è realmente necessario (come nessuno chiama bash -- login), ma è presente solo come guardia.

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
Lol, mi chiedevo chi ha scritto questa risposta ... risulta che sono stato io :-)
zapstar
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.