How to make the top bar of my terminal say what command is running?
Taken from Bash - Update terminal title by running a second command · U&L and slightly changed:
trap 'echo -ne "\033]2;$(history 1 | sed "s/^[0-9 ]* \+//")\007"' DEBUG
This (ab)uses the DEBUG
signal as a trigger to update the title with the last entry from your history, i.e. the last command you executed, via an XTerm Control Sequence. Add the line to your ~/.bashrc
to have the feature enabled in every new terminal window.
To print other command output alongside in the title, say the current directory with pwd
followed by ": " and the currently running command, I recommend using printf
as follows:
trap 'echo -ne "\033]2;$(printf "%s: %s" "$(pwd)" "$(history 1 | sed "s/^[0-9 ]* \+//")")\007"' DEBUG
Some terminal emulators allow you to specify a dynamic title and even give you the command name as an option so that you don't even need to fiddle around – I searched and found it in yakuake
's profile settings.
The terminal window title could be changed by changing of the value of the variable $PS1
- the primary prompt string. [1] [2]. We could combine this solution with the idea of using the history
command from the Dessert's answer.
Approach 1: Update the value of $PS1
automatically. (Update)
Add the following lines to the bottom of the file ~/.bashrc
:
# Change the terminal window title, based on the last executed command
rtitle() {
# If the variable $PS1_bak is unset,
# then store the original value of $PS1 in $PS1_bak and chang $PS1
# else restore the value of $PS1 and unset @PS1_bak
if [ -z "${PS1_bak}" ]; then
PS1_bak=$PS1
PS1+='\e]2;$(history 1 | sed "s/^[0-9 ]* \+//")\a'
else
PS1=$PS1_bak
unset PS1_bak
fi
};
export -f rtitle # Export the function to be accessible in sub shells
#rtitle # Uncomment this line to change the default behaviour
Then source ~/.bashrc
or just open a new terminal and use the function in this way:
- Execute
rtitle
to start changing the terminal window title automatically, based on the last executed command. - Execute
rtitle
once again to return to the default behaviour.
Approach 2: Update the value of $PS1
manually. (Initial answer)
Add the following lines to the bottom of the file ~/.bashrc
:
set-title() { # Set a title of the current terminal window
[[ -z ${@} ]] && TITLE="$(history 2 | head -1 | sed "s/^[0-9 ]* \+//")" || TITLE="$@" # If the title is not provided use the previous command
[[ -z ${PS_ORIGINAL} ]] && PS_ORIGINAL="${PS1}" || PS_ORIGINAL="${PS_ORIGINAL}" # Use the original value of PS1 for each future change
PS1="${PS_ORIGINAL}"'\e]2;'"$TITLE"'\a' # Change the prompt (the value of PS1)
}; export -f set-title
Then source ~/.bashrc
or just open a new terminal and use the function in this way:
set-title <something>
will change the terminal window title to<something>
.set-title
without argument will change the terminal window title to the previous command.
References and examples:
- Ubuntu 15.04 fresh install: Can't rename gnome-terminal tabs
- How to change Terminal Title in ubuntu 16.04
- Example 1; Example 2