None of the currently posted answers works/answers the question.
As per my original question, neither setting PS1 nor PROMPT_COMMAND had any effect.
Using only a command at the command prompt, how do I change the title of the current terminal tab?
Many posts suggest this:
echo -en "\033]0;New terminal title\a"but it does nothing.
None of the current answers works (some don't answer the question), so for clarity:
- Once the title is changed, I don't want it to change if I change directory etc
- I don't want the same title on all tabs. I only want to set the title for the tab I run the command in
- I want multiple tabs to each have different titles
Also, the PROMPT_COMMAND variable is not set in my terminal sessions. If I set it:
PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"'it has no effect.
What is the correct command?
FYI, the output of uname -a is:
11Linux d136172 3.13.0-45-generic #74-Ubuntu SMP Tue Jan 13 19:36:28 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
10 Answers
from @Maythux, this one works for my needs to disregard my auto-prompt current-directory on terminal.
PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"'Instruction
Change the string on "New Terminal Name" with $("pwd"):
PROMPT_COMMAND='echo -en "\033]0; $("pwd") \a"'This will automatically change the title even when you add a new tab.
I use the setting below which looks better, you can also play bash programming and set your own.
PROMPT_COMMAND='echo -en "\033]0;$(whoami)@$(hostname)|$(pwd|cut -d "/" -f 4-100)\a"'Add this setting to your ~/.bashrc.
From , a bash-specific solution is to create a custom function (see e.g. this how-to) like
# function to set terminal title
function set-title() { if [[ -z "$ORIG" ]]; then ORIG=$PS1 fi TITLE="\[\e]2;$*\a\]" PS1=${ORIG}${TITLE}
}which allows you to call set-title <name you want to set it to>
When the PS1 sets the title, any attempt to set the title using a command or PROMPT_COMMAND will fail, since the prompt is printed after all of them. For this reason, I prefer to keep a simple prompt while testing titles (PS1=$; unset PROMPT_COMMAND).
It is very likely that PROMPT_COMMAND is set and it is overwriting your choice of title every time the prompt is displayed. Try unsetting it and then issuing your title command:
PROMPT_COMMAND=
echo -en "\033]0;New terminal title\a" 17 This thread may be a little old, but here is a solution that works for me:
2Simply edit your $HOME/.bashrc file and add the following function:
set-title(){
ORIG=$PS1
TITLE="\e]2;$@\a"
PS1=${ORIG}${TITLE}
}Now whenever you want to set the title of your terminal, just enter something like:
set-title "my awesome terminal title"
Instructions
- Add settitle() to your
.bashrc. source ~/.bashrcsettitle Banana
settitle()
function settitle()
{ if [ $# -eq 0 ] then eval set -- "\\u@\\h: \\w" fi case $TERM in xterm*) local title="\[\033]0;$@\007\]";; *) local title='' esac local prompt=$(echo "$PS1" | sed -e 's/\\\[\\033\]0;.*\\007\\\]//') PS1="${title}${prompt}"
} 3 You can do it, either in CLI or GUI(I suppose you are using gnome-terminal, you can do for others just replace the name of app):
In CLI Run the command:
gconftool-2 --set /apps/gnome-terminal/profiles/Default/title --type=string "New Terminal Name"Note: the new name is applied to all instances of terminal tabs, and not for the only current tab.
Or from GUI:
Go to Menu: Terminal --> Set Title --> Enter new title then save.
Now Why your command not work?
You should add this line to the .bashrc file and not directly to your terminal.
gedit .bashrcAdd this line:
PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"'Then save and source the bashrc file.
source .bashrc 2 Based on @muru answer
PS1 sets the title, any attempt to set the title using a command or PROMPT_COMMAND will fail, since the prompt is printed after all of them
This worked in my Elementary S.O :
PS1='\u:\W\$ '
PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"'I execute this in each new tab :
And as the previous image shows, I have several tabs with unique name.
16.04.1-Ubuntu
1Using bash, wmctrl, xprop, ps
1) For a long-running active program:
For example, start a program (ranger) running in a terminal, started from the desktop, change the title, once, after some delay ( 5 seconds ) when the program starts :
startranger.sh:
#!/bin/bash
/usr/local/bin/changetitle.sh 5 ranger
/usr/local/bin/rangerchangetitle.sh:
#!/bin/bash
delay="$1"
shift
wintitle="$*"
winid=`xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/'`
/bin/bash -c "sleep $delay; wmctrl -i -r $winid -N \"$wintitle\"" &2) If you are running a terminal session without running an active program, update the title on a loop that ends when your terminal exits:
changetitleloop.sh 1 maintenance for serverrunning the above will update the title of the current terminal every 1 second even if you cd (can change it multiple times), using:
changetitleloop.sh
#!/bin/bash
interval="$1"
shift
wintitle="$*"
termpid="$(ps -p $$ -o ppid= | sed -e 's/^[ \t]*//')"
winid=`xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/'`
/bin/bash -c "ss=\$$; echo \$ss > /tmp/term-$termpid.pid; while x=\$(wmctrl -i -r $winid -N \"$wintitle\"); ret=\$?; sleep $interval; owner=\$(cat /tmp/term-$termpid.pid); [ \$ret -eq 0 ] && [ \$ss -eq \$owner ]; do continue; done;" & One solution may be to install the latest version of tmux.
tmux allows setting per-pane titles, enabled by this command:
tmux set -g pane-border-status topThey can also be displayed on the bottom.
Titles are then set via an escape sequence:
printf '\033]2│;%s\033\\' 'My Pane Title'Each pane can have its own title and all titles show all the time.
The tmux panes will then look like this:
──0 "My Pane Title"──────┬──1 "Another Pane"───────
> │>This was tested on linux mint 18.2 (like Ubuntu) with tmux 2.8. Installation was from a tarball.
If you want to be more productive in your terminal, tmux offers lots of other features too.