GNOME Terminal-选项卡标题中的进程名称


9

如何将当前正在运行的进程名称放入GNOME终端标签标题(或只有一个标签的标题栏)中?

-更新-

为了明确起见,我希望在运行进程时更新选项卡标题,例如:

# 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"

Answers:


8

找到了。该站点很好地说明了解决方案。
在您的bashrc中,它看起来像:

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

就我个人而言,我认为我不会将其添加到我的bashrc中,因为在所有shell启动时,结合DEBUG和trace确实会抛出大量垃圾。如果您可以接受,那么它确实可以工作。它确实显示了整个命令,但不仅显示第一个单词。


2
感谢您提出一个好的问题。起初这似乎是一个简单的问题...在开始的10分钟之后,它开始让我发疯!这就是为什么我认为这是一个很好的问题-听起来很简单,但是却迫使我对外壳,终端和信号之间的交互作用有更深入的了解。
DaveParillo

为什么要PS1分配?它给我带来了无聊的感觉,在这里似乎真的没有必要...?
phil294

对我来说只是错误。
Kzqai

4

好吧,既然每个人似乎都已经知道David Pashley的解决方案,那我花了很长时间才找到这个解决方案,因为它已经差不多老了,我对此感到惊讶。

该解决方案实际上负责处理bash垃圾邮件。

需要说明的是:除了研究,我在这里没有做任何其他事情。一切归功于Marius Gedminas

这对Gnome-Terminal / Terminator非常适合我

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

    # Show the currently running command in the terminal title:
    # http://www.davidpashley.com/articles/xterm-titles-with-bash.html
    show_command_in_title_bar()
    {
        case "$BASH_COMMAND" in
            *\033]0*)
                # The command is trying to set the title bar as well;
                # this is most likely the execution of $PROMPT_COMMAND.
                # In any case nested escapes confuse the terminal, so don't
                # output them.
                ;;
            *)
                echo -ne "\033]0;${USER}@${HOSTNAME}: ${BASH_COMMAND}\007"
                ;;
        esac
    }
    trap show_command_in_title_bar DEBUG
    ;;
*)
    ;;
esac

这也是一个交叉发布,因为我刚刚发现了这个问题并想分享,我认为在这里也很有用。


2

下面应该工作。我在.bash_functions文件中具有该功能,并.bashrc在设置之前在文件中提供该功能$PROMPT_COMMAND

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

PROMPT_COMMAND='echo -ne "\033]0;"$(term_title)"\007"'

1
您接近了,但我没有更好的选择。这将为您提供最后执行的命令,但并不是真正的意义。我以为只要将term_title更改为:`if [jobs]; 然后是历史1 | awk'{print $ 2}'; 否则echo -ne'bash em'fi'可以工作,但是对于捕获寿命短的进程并不一致,并且在完成该过程后仍然不会切换回去。我不知道xterm的内部工作原理,不知道该如何处理那些触发器/事件。
DaveParillo

bash会在显示提示之前执行$ PROMPT_COMMAND,所以这是我能用这种方法做的最好的事情。在您按下Enter键之后,可能还有其他触发器可以立即执行,但我不知道它们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.