如何将当前正在运行的进程名称放入 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"
答案1
找到了。本网站为解决方案提供了很好的解释。
在您的 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
好吧,既然每个人似乎都已经知道 David Pashley 的解决方案,我有点惊讶我花了这么长时间才找到这个,因为它几乎一样古老。
该解决方案实际上解决了 bash-completion 垃圾邮件问题。
需要说明的是:我在这里没有做任何自己的事情,只是做了研究。所有功劳都归于马里乌斯·格德米纳斯。
对我来说,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
这也是交叉发布因为我刚刚发现它并想分享,而且我认为它在这里也很有用。
答案3
下面应该可以工作。我在文件中有该函数,并在设置之前在文件.bash_functions
中获取它。.bashrc
$PROMPT_COMMAND
function term_title
{
history 1 | awk '{print $2}';
}
PROMPT_COMMAND='echo -ne "\033]0;"$(term_title)"\007"'
答案4
在 zsh 中,您只需定义“precmd”函数。看这里。