17

In Mac OS X (I'm on 10.6.8, though I believe other versions are the same) ssh'ing into a remote machine changes the title of the current tab in Terminal. Annoyingly, when I disconnect from the remote machine, either explicitly with exit or via a timeout, the title of the tab doesn't change back to what it was.

On an almost daily basis this nearly causes me to suffer a heart attack, when I'm typing away performing some command or other, only to see out of the corner of my eye that the tab is still named user@remotehost. I'm a cautious user that always tends to pwd etc to confirm my location before doing anything, yet it still catches me in a moment of panic when I'm doing DROP DATABASE x and I see the remote host name in the tab.

Long story short, is there a way to revert this title when disconnecting from a remote host, or do I have to stick with opening a new tab every time I disconnect, to reset the title?

1
  • terminal names also reset when you quit npm Commented Nov 23, 2016 at 0:44

3 Answers 3

22

Since macOS Catalina 10.15, the default interactive shell is zsh.

zsh offers the precmd function which executes before each prompt. https://zsh.sourceforge.io/Doc/Release/Functions.html#index-precmd

Add the following to your ~/.zshrc file.

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

Before macOS Catalina 10.15, the default interactive shell was bash.

Add a PROMPT_COMMAND to your .bash_profile

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

The PROMPT_COMMAND gets executed every time the prompt is displayed.

Please note that we include the existing PROMPT_COMMAND environment variable, such that we do not lose any existing settings (i.e. update_terminal_cwd).

8
  • 4
    Be sure to add your code to PROMPT_COMMAND rather than replacing it, e.g., PROMPT_COMMAND="<your code>; $PROMPT_COMMAND"; otherwise, you’ll disable other functionality that uses this variable. For example, /etc/bashrc uses it to set the terminal’s current working directory so Terminal can display it and use it for various operations.
    – Chris Page
    Commented Oct 25, 2014 at 0:06
  • @ChrisPage Does the new code need to come before $PROMPT_COMMAND for the other functionality to be preserved? Commented Oct 25, 2015 at 3:45
  • Why not put it directly into PS1?
    – Yongwei Wu
    Commented Aug 2, 2016 at 9:22
  • is this how you edit the .bash_profile? sublime $HOME/.bash_profile ? Commented Nov 23, 2016 at 0:42
  • @Awesome_girl Make sure that the subl command is installed, and then edit the file from your terminal using subl ~/.bash_profile. If this command doesn't exist, follow this: sublimetext.com/docs/2/osx_command_line.html Commented Nov 27, 2016 at 18:30
8

To make @s01ipsist's solution work with ZSH (new shell on macOS), you can add this to ~/.zshrc:

export PROMPT_COMMAND="echo -ne '\033]0;${USER}@${HOST}\007';$PROMPT_COMMAND"
precmd() { eval "$PROMPT_COMMAND" }
1
  • Thank you. This answer works on zsh. :)
    – Phrogz
    Commented Dec 5 at 15:42
2

Here's what you'll need to paste into your .bash_profile file. This is far cleaner and takes the approach what Apple does when it updates your current working directory. The check for the variable update_term_title is already present is not really necessary (as nobody calls bash -- login), but just present as a guard.

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
  • 1
    Lol, I wondered who wrote this answer... turns out it was me :-)
    – zapstar
    Commented Apr 6, 2018 at 4:28

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .