Set screen-title from shellscript

Viewed 70732

Is it possible to set the Screen Title using a shell script?

I thought about something like sending the key commands ctrl+A shift-A Name enter

I searched for about an hour on how to emulate keystrokes in an shell script, but didn't find the answer.

12 Answers

My solution to this problem was to create a bash script and add it to my ~/.bashrc file:

set-title() {
  ORIG==$PS1
  TITLE="\e];$@\a"
  PS1=${ORIG}${TITLE}
}

Now when I'm in any bash shell session, I type "set-title desired_title" and it changes to "desired title". This works for multiple versions of Ubuntu, currently on Kinetic 16.04

I got this solution from here. I was looking for it again, couldn't find it and thought I'd post it here for anyone interested.

I got this solution from experimenting with others, like @flurin-arner I started the @weston-ganger set-title(). I also used @imgx64 PROMPT_DIRTRIM suggestion. I'm also using @itseranga git branch prompt, though this has nothing to do with the question it does show what you can do with the prompt.

First as shown by weston and above

 TITLE="\[\e]2;$*\a\]"

can be used to manually set the Terminal Title, "$*" is commandline input, but not what we want.

2nd as stated I'm also adding git branch to my prompt, again not part of the question.

export PROMPT_DIRTRIM=3
parse_git_branch() {
       git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
     }

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "

3rd, by experiment I copied the TITLE code above, set the $* to a fixed string and tried this:

see: \[\e]2;'SomeTitleString'\a\]

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]\[\e]2;'SomeTitleString'\a\] $ "

This had the desired effect! Ultimately, I wanted the base path as my title. PS1 Params shows that \W is the base path so my solution is this:

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]\[\e]2;\W\a\] $ "

without the git branch:

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\[\033[00m\]\[\e]2;\W\a\] $ "

resulting in a prompt with git-branch:

user@host ~/.../StudyJava (master) $  

resulting in a prompt without parse_git_branch:

   user@host ~/.../StudyJava $  

where pwd gives

/home/user/somedir1/otherdir2/StudyJava

and Terminal Title

StudyJava

NOTE: From @seff above I am essentially replacing the "My Title" with "\W"

export PS1='\[\e]0;My Title\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

I tried this on Ubuntu 18.10 and it only worked with PROMPT_COMMAND in ~/.bashrc. And if you override PROMPT_COMMAND, the behavior of the title changes slightly. I decided to change only if necessary:

t() {
  TITLE="$@"
  PROMPT_COMMAND='echo -ne "\033]0;${TITLE}\007"'
}

enter image description here

Related