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

23

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. 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? 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
9

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. :) Commented Dec 5, 2024 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 :-) Commented Apr 6, 2018 at 4:28

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.