0

This question already has an answer here:

I have my bash_profile on my Mac and the remote computers I connect to setup to automatically put the hostname in the window's (or tab's) title area.

A bash shell on my local machine

Local Apple Account

A remote host name "Socrates"; also a bash shell.

Remote Shell Window

The problem is, when I exit (and disconnect) from the remote host, the window title stays with the host name of the remote. So, in effect, I'm on the local Apple bash shell with the remote name. To fix it, I do one of the following:

  • close the window and open a new one
  • re-source the .bash_profile (. ~/.bash_profile)
  • create a new sub shell by issuing the command bash (not desirable at all)

How can I have this done automatically so that when I exit a remote shell, the title goes back to the original host name so I know what host I'm actually connected to?

Note, the previously asked question, Terminal displays directory of previous SSH location even when not running SSH didn't adequately address the issue because the solution was to modify .bash_logoff which only worked for login shells.

marked as duplicate by Ruskes, Nimesh Neema, IconDaemon, fd0, Ɱark Ƭ Nov 12 '18 at 13:46

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • Not sure about this not being a dpulicate, the answer on the other post also offers a solution without using .bash_logout. And the answer you've posted below would be equally valid for the other question as well. – nohillside Nov 10 '18 at 6:57
0

The solution to this problem is solved by using Terminal Control Codes (Esc 22 and 23) and placing four simple lines in .bashrc of the remote host:

# ~/.bashrc
#
# Set the Terminal Title

echo -ne "\033[22;0t"                     #Save Title on Stack
echo -ne "\033]0;${HOSTNAME}\007"         #Set New Title

trap 'echo -ne "\033[23;0t"'  EXIT        #Reset Title Window

How This Works

By using the Terminal Escape Sequence Codes 22 and 23, we can save and retrieve the original title. The trap function (man bash) will execute a command when a signal is received; in this case upon exit.

Now, when I exit (terminate) the remote host, the title reverts back to the proper host name.

Why .bashrc?

I want to have this available to me whether I log into the host from a remote machine (most common) or when I am local to it. .bash_profile is read for an interactive login shell and .bashrc is read for an interactive, non-login shell (local) is started.

To ensure that this is the same for both conditions, I include the following in my .bash_profile:

# run a .bashrc file if it exists.

test -f ~/.bashrc && . ~/.bashrc
  • Wouldn't it be easier to do what most people do, set the window title as part of the prompt? – Marc Wilson Nov 11 '18 at 18:41
  • @MarcWilson - and when you exit the session? – Allan Nov 11 '18 at 18:51
  • And then the previous prompt controls. – Marc Wilson Nov 11 '18 at 18:54
  • Unless you restart the session, it doesn't change the title. Have you tested it? – Allan Nov 11 '18 at 18:57
  • Of course. How else would you expect it to work? Bash evaluates PROMPT_COMMAND every time it displays the prompt. This also allows you to have the same shell configuration on the remotes as on the primary host. For myself, I use ksh93, which allows you to substitute and perform alias expansions in $PS1 directly, but the results are the same. – Marc Wilson Nov 11 '18 at 19:16

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