当前位置: 首页>>技术教程>>正文


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

问题描述

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

根据我最初的问题,设置 PS1PROMPT_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

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

第七种思路

您可以在 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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13037.html,未经允许,请勿转载。