14

How can I set the window title in Bash? I do know that in Windows Batch it is TITLE.

Nathan
  • 1,385
  • 5
  • 19
  • 36

7 Answers7

15

Here is a nice function to do it:

# Allow the user to set the title.
function title {
   PROMPT_COMMAND="echo -ne \"\033]0;$1 (on $HOSTNAME)\007\""
}

Put that in your ~/.bashrc, then type "title whatever" to set the title. If you want to get rid of the hostname, remove "(on $HOSTNAME)".

Edit: make sure to . ~/.bashrc (aka source ~/.bashrc) before trying, of course.

Source link.

quack quixote
  • 43,504
danben
  • 266
3

I have this VT100 escape sequence defined in .bashrc.

PS1_SET_TITLE='\[\e]0;\u@\h:\w\a\]'

PS1="${PS1_SET_TITLE}" my other prompt components

export PS1

For my home directory it displays alex@host:~, when I change directories, they are updated in window title.

Works with CYGWIN and PuTTY terminal sessions. I usually don't run X, but when I did it worked fine with XTerm.

Read PROMPTING section of bash man page on available switches for PS commands, e.g \u \h \w.

2

Here is some code to set window title in bash - an improved version, that doesn't remove
previous prompt string (and changes to it are temporary), of another answer (quoted below):

function title {
    export WTITLE=$1
}
PS1_old="$(echo $PS1 | sed -En 's/(.+)\\e](.+)/\1\\\\e]\2/g; s/(.+ )(.+)/\1\\n\2/p')";
_PS1='\[\e]0;$WTITLE: \w\a\]';_PS1+="$PS1_old ";export PS1=$_PS1;

# A command to use in bash (shell) scripts, replaces
# the above function that is for a "~/.bashrc" file:
export WTITLE="[for example \u@\h, insert title here]"

If you are using "mintty" (the default terminal of Cygwin since end 2011),
add the following in .bashrc :

function title {
    export WINDOWTITLE=$1
}    
export PS1='\[\e]0;$WINDOWTITLE:\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]~\w\[\e[0m\]\n\$'

and reopen your terminal and type "title ThisIsMyTitle"

- quote from this answer.

Edward
  • 125
2

I ended up writing a function title. It supports echo-like escape sequences and -e/-E (although I haven't tested escapes) by passing the arguments directly to echo.

title() {
  echo -ne "\e]0;"
  echo -n "$@"
  echo -ne "\a"
}

This can be placed directly in .bashrc.

2

If you are using "mintty" (the default terminal of Cygwin since end 2011), add the following in .bashrc :

function title {
   export WINDOWTITLE=$1
}    
export PS1='\[\e]0;$WINDOWTITLE:\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]~\w\[\e[0m\]\n\$'

and reopen your terminal and type "title ThisIsMyTitle"

0

I use simple title bash script that lies in PATH:

#!/usr/bin/env bash
echo -ne "\033]0;$@\007"

Usage:

title My favourite window title

Works once, so if any other program changes the title - you need to run the script once again.

pbies
  • 3,550
0

We need more information: The answer will depend on what terminal you're using, not what shell. Is this in an xterm? An rxvt? A cygwin window on windows? Etc.

(danben's answer works for xterms, and probably for rxvt terminals)