问题描述
当前发布的答案都没有工作/回答问题。
根据我最初的问题,设置 PS1
和 PROMPT_COMMAND
都没有任何效果。
在命令提示符下仅使用一个命令,如何更改当前终端选项卡的标题?
许多帖子都建议这样做:
echo -en "\033]0;New terminal title\a"
但它什么也没做。
当前的答案都不起作用(有些没有回答问题),所以为了清楚起见:
-
更改标题后,如果更改目录等,我不希望它更改
-
我不希望所有选项卡上的标题都相同。我只想为运行命令的选项卡设置标题
-
我想要多个标签,每个标签都有不同的标题
此外,我的终端会话中未设置 PROMPT_COMMAND
变量。如果我设置它:
PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"'
它没有效果。
什么是正确的命令?
仅供参考, uname -a
的输出是:
\\n
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
\\n
最佳思路
来自@Maythux,这可以满足我在终端上忽略我的 auto-prompt current-directory 的需要。
PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"'
Instruction
使用 $("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
。
次佳思路
从 https://askubuntu.com/a/774543/455406 开始, bash-specific 解决方案是创建一个自定义函数(参见例如 this how-to ),例如
# function to set terminal title
function set-title() {
if [[ -z "$ORIG" ]]; then
ORIG=$PS1
fi
TITLE="\[\e]2;$*\a\]"
PS1=${ORIG}${TITLE}
}
它允许您调用 set-title <name you want to set it to>
第三种思路
当 PS1
设置标题时,任何使用命令或 PROMPT_COMMAND
设置标题的尝试都将失败,因为在所有这些之后都会打印提示。出于这个原因,我更喜欢在测试标题时保持简单的提示( PS1=$; unset PROMPT_COMMAND
)。
第四种思路
很可能设置了 PROMPT_COMMAND
并且每次显示提示时它都会覆盖您选择的标题。尝试取消设置,然后发出您的标题命令:
PROMPT_COMMAND=
echo -en "\033]0;New terminal title\a"
第五种思路
这个线程可能有点旧,但这里有一个适合我的解决方案:
https://blog.programster.org/ubuntu-16-04-set-terminal-title
\\n
Simply edit your $HOME/.bashrc file and add the following function:
\\n set-title(){
\\n ORIG=$PS1
\\n TITLE=”\\\\e]2;$@\\\\a”
\\n PS1=${ORIG}${TITLE}
\\n }\\n
Now whenever you want to set the title of your terminal, just enter\\n something like:
\\n set-title “my awesome terminal title”\\n
第六种思路
Instructions
-
将 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}"
}
第七种思路
您可以在 CLI 或 GUI 中执行此操作(我想您使用的是 gnome-terminal,您可以为其他人执行,只需替换应用程序的名称):
在 CLI 中运行命令:
gconftool-2 --set /apps/gnome-terminal/profiles/Default/title --type=string "New Terminal Name"
注意:新名称应用于终端选项卡的所有实例,而不是唯一的当前选项卡。
或从图形用户界面:
转到菜单:终端–>设置标题 –>输入新标题然后保存。
现在为什么你的命令不起作用?
您应该将此行添加到 .bashrc
文件中,而不是直接添加到终端中。
gedit .bashrc
添加这一行:
PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"'
然后保存并获取 bashrc 文件。
source .bashrc
第八种思路
基于@muru 答案
\\n
PS1 sets the title, any attempt to set the title using a command or PROMPT_COMMAND will fail, since the prompt is printed after all of them
\\n
这在我的小学 S.O 中有效:
PS1='\u:\W\$ '
PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"'
我在每个新选项卡中执行此操作:
如上图所示,我有几个具有唯一名称的选项卡。
16.04.1-Ubuntu