Titre de l'onglet du terminal après la session SSH

11

Sous Mac OS X (je suis sur 10.6.8, bien que je pense que les autres versions soient les mêmes), le fait de passer à une machine distante change le titre de l'onglet actuel dans Terminal. De façon ennuyeuse, lorsque je me déconnecte de la machine distante, explicitement avec exitou via un délai d'expiration, le titre de l'onglet ne revient pas à ce qu'il était.

Sur une base presque quotidienne, cela me fait presque souffrir d'une crise cardiaque, lorsque je tape en exécutant une commande ou une autre, pour voir du coin de l'œil que l'onglet est toujours nommé user @ remotehost. Je suis un utilisateur prudent qui a toujours tendance à pwdconfirmer ma position avant de faire quoi que ce soit, mais cela m'attrape toujours dans un moment de panique lorsque je le fais DROP DATABASE xet je vois le nom d'hôte distant dans l'onglet.

Pour faire court, y a-t-il un moyen de revenir sur ce titre lors de la déconnexion d'un hôte distant, ou dois-je m'en tenir à l'ouverture d'un nouvel onglet à chaque fois que je me déconnecte, pour réinitialiser le titre?

Peter O'Callaghan
la source
les noms des terminaux sont également réinitialisés lorsque vous quitteznpm
Awesome_girl

Réponses:

20

Ajoutez un PROMPT_COMMANDà votre .bash_profile

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

L' PROMPT_COMMANDexécute à chaque fois que l'invite est affichée.

Veuillez noter que nous incluons la PROMPT_COMMANDvariable d'environnement existante , de sorte que nous ne perdons aucun paramètre existant (c'est-à-dire update_terminal_cwd).

s01ipsist
la source
2
Assurez-vous d' ajouter votre code à PROMPT_COMMAND plutôt que de le remplacer, par exemple PROMPT_COMMAND="<your code>; $PROMPT_COMMAND"; sinon, vous désactivez les autres fonctionnalités qui utilisent cette variable. Par exemple, / etc / bashrc l'utilise pour définir le répertoire de travail actuel du terminal afin que Terminal puisse l'afficher et l'utiliser pour diverses opérations.
Chris Page
@ChrisPage Le nouveau code doit-il venir avant $PROMPT_COMMANDpour que les autres fonctionnalités soient préservées?
reve_etrange
Pourquoi ne pas le mettre directement sur PS1?
Yongwei Wu
est-ce ainsi que vous modifiez le .bash_profile? sublime $HOME/.bash_profile?
Awesome_girl
@Awesome_girl Assurez-vous que la sublcommande est installée, puis modifiez le fichier à partir de votre terminal à l'aide de subl ~/.bash_profile. Si cette commande n'existe pas, suivez ceci: sublimetext.com/docs/2/osx_command_line.html
XtraSimplicity
2

Pour faire fonctionner la solution de @ s01ipsist avec ZSH (nouveau shell sur macOS), vous pouvez ajouter ceci à ~/.zshrc:

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

Voici ce que vous devrez coller dans votre .bash_profilefichier. C'est beaucoup plus propre et prend l'approche de ce que fait Apple quand il met à jour votre répertoire de travail actuel. La vérification de la variable update_term_titleest déjà présente n'est pas vraiment nécessaire (comme personne n'appelle bash -- login), mais juste présente comme un gardien.

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
la source
1
Lol, je me demandais qui avait écrit cette réponse ... il se trouve que c'était moi :-)
zapstar