How can I put the current running process name into a GNOME Terminal tab title (or title bar when there's only one tab)?

-- UPDATE --

To clarify, I want the tab title to update when I run a process, for example:

# title is currently "bash"
$ find / -name foo # while searching for foo, title is "find"
$ # title is once again "bash"
$ less /proc/cpuinfo # title changes to "less"
$ man ls # title changes to man
$ # title returns to "bash"
link|improve this question

feedback

3 Answers

up vote 3 down vote accepted

Found it. This site provides a good explanation of a solution.
In your bashrc, it would look like:

case "$TERM" in
xterm*|rxvt*)
    set -o functrace
    trap 'echo -ne "\e]0;$BASH_COMMAND\007"' DEBUG
    PS1="\e]0;\s\007$PS1"
    ;;
*)
    ;;
esac

Personally, I don't think I would add it to my bashrc, because the DEBUG combined with trace does throw out a load of garbage when all your shell starts. If you can live with that, it actually does work. It does display the entire command, however, not just the first word.

link|improve this answer
Thanks for putting in the effort on this one! – adurity Sep 21 '09 at 5:09
1  
Thank you for asking a good question. This looked like a simple question at first... After the first 10 minutes, it was starting to drive me nuts! That's why I thought it was a good question - sounds simple, but forced me to learn something deeper about the interaction between the shell, the terminal and signals. – DaveParillo Sep 21 '09 at 17:10
feedback

The below should work. I have the function in a .bash_functions file, and source it in the .bashrc file before setting $PROMPT_COMMAND.

function term_title
{
        history 1 | awk '{print $2}';
}

PROMPT_COMMAND='echo -ne "\033]0;"$(term_title)"\007"'
link|improve this answer
1  
You're close, but I don't have much better. This will give you the last executed command, but not really what adurity is after. I thought just changing term_title to : ` if [ jobs ]; then history 1 | awk '{print $2}'; else echo -ne 'bash em' fi` would work, but it's inconsistent about catching processes with short lifetimes and it still doesn't switch back when the process is finished. I don't know about the innerworkings of xterm to know how to mess with those triggers/ events. – DaveParillo Sep 18 '09 at 1:21
bash executes $PROMPT_COMMAND just before displaying the prompt, so this is the best I can do with this approach. There might be other triggers that can execute right after you hit Enter, but I don't know of them. – nagul Sep 18 '09 at 8:01
feedback

in zsh you just define your 'precmd' function. see here.

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.