如何仅使用命令行更改当前终端选项卡的标题

当前发布的答案都没有工作/回答问题。


在命令提示符下仅使用命令,如何更改当前终端选项卡的标题?

很多post都暗示:

echo -en "\033]0;New terminal title\a" 

但它什么都没做。

目前的答案都不起作用(有些答案没有回答),所以为了清楚起见:

  • 标题更改后,如果我更改目录等,我不希望它改变
  • 我不想在所有标签上使用相同的标题。 我只想为运行命令的选项卡设置标题
  • 我想要多个标签,每个标签都有不同的标题

此外,我的终端会话中未设置PROMPT_COMMAND变量。 如果我设置它:

 PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"' 

它没有效果。

什么是正确的命令?


仅供参考, uname -a的输出是:

Linux 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

来自@Maythux,这个可以满足我的需要,忽略终端上的自动提示当前目录。

 PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"' 

指令

使用$("pwd")更改“新终端名称”上的字符串:

 PROMPT_COMMAND='echo -en "\033]0; $("pwd") \a"' 

即使添加新选项卡,这也会自动更改标题。


我使用下面的设置看起来更好,你也可以玩bash编程并设置自己的。

 PROMPT_COMMAND='echo -en "\033]0;$(whoami)@$(hostname)|$(pwd|cut -d "/" -f 4-100)\a"' 

将此设置添加到~/.bashrc

PS1设置标题时,任何使用命令或PROMPT_COMMAND设置标题的尝试PROMPT_COMMAND将失败,因为在所有这些之后打印提示。 出于这个原因,我更喜欢在测试游戏时保持一个简单的提示( PS1=$; unset PROMPT_COMMAND )。

您可以在CLI或GUI中执行此操作(我假设您使用的是gnome-terminal,您可以为其他人替换,只需替换app的名称):

在CLI中运行命令:

 gconftool-2 --set /apps/gnome-terminal/profiles/Default/title --type=string "New Terminal Name" 

注意:新名称将应用于终端选项卡的所有实例,而不适用于唯一的当前选项卡。

在此处输入图像描述

或者从GUI:

转到菜单:终端 – >设置标题 – >输入新标题然后保存。


现在为什么你的命令不起作用?

您应该将此行添加到.bashrc文件中,而不是直接添加到您的终端。

 gedit .bashrc 

添加此行:

 PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"' 

然后保存并获取bashrc文件。

 source .bashrc 

PROMPT_COMMAND很可能已设置,并且每次显示提示时它都会覆盖您对标题的选择。 尝试取消设置然后发出title命令:

 PROMPT_COMMAND= echo -en "\033]0;New terminal title\a" 

说明

  1. 将settitle()添加到.bashrc
  2. source ~/.bashrc
  3. settitle 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}" } 

从https://askubuntu.com/a/774543/455406 ,一个特定于bash的解决方案是创建一个自定义函数(参见例如这个方法 )

 # function to set terminal title function set-title() { if [[ -z "$ORIG" ]]; then ORIG=$PS1 fi TITLE="\[\e]2;$*\a\]" PS1=${ORIG}${TITLE} } 

它允许您调用set-title

使用bash,wmctrl,xprop,ps

1)对于长期运行的活动程序:

例如,启动在终端中运行的程序(游侠),从桌面启动,在程序启动一段延迟(5秒)后更改标题一次:

startranger.sh:

 #!/bin/bash /usr/local/bin/changetitle.sh 5 ranger /usr/local/bin/ranger 

changetitle.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)如果您在没有运行活动程序的情况下运行终端会话,请在终端退出时结束的循环上更新标题:

 changetitleloop.sh 1 maintenance for server 

运行上面的命令将每1秒更新当前终端的标题,即使你cd (可以多次更改),使用:

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;" & 

基于@muru回答

PS1设置标题,任何使用命令或PROMPT_COMMAND设置标题的尝试都将失败,因为在所有这些之后打印提示

这在我的小学SO中有效:

 PS1='\u:\W\$ ' PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"' 

我在每个新标签中执行此操作:

标签1

标签2

如前图所示,我有几个具有唯一名称的选项卡。

16.04.1 Ubuntu的

这个post可能有点旧,但这里有一个对我有用的解决方案:

https://blog.programster.org/ubuntu-16-04-set-terminal-title

只需编辑$ HOME / .bashrc文件并添加以下function:
设定标题(){
弊= $ PS1
TITLE = “\ E] 2; $ @ \一个”
PS1 = $ {弊} $ {TITLE}
}

现在,只要您想设置终端的标题,只需输入以下内容:
set-title“my awesome terminal title”