如何仅使用命令行更改当前终端选项卡的标题
当前发布的答案都没有工作/回答问题。
在命令提示符下仅使用命令,如何更改当前终端选项卡的标题?
很多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"
说明
- 将settitle()添加到
.bashrc
。 -
source ~/.bashrc
-
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"'
我在每个新标签中执行此操作:
如前图所示,我有几个具有唯一名称的选项卡。
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”