每当我键入命令时,GNU 屏幕选项卡都会被重命名

每当我键入命令时,GNU 屏幕选项卡都会被重命名

当我使用 gnu screen 时,在其他选项卡中,我通过 ssh 进入其他计算机,相应地重命名选项卡,然后正常工作。选项卡名称会保留。

在一个新选项卡中,它只是原始计算机上的一个终端,每当我键入任何命令时,该选项卡都会重命名为当前工作目录。

例子:

/////////// 这是一切之前的样子

    [me@mac ~]$
    [ me ][0*$ me@mac:~  1-$ web01  2$ dev03

////////// 设置选项卡名称

    [me@mac ~]$ 
    Set window's title to: test
    [ me ][0*$ test  1-$ web01 clone  2$ dev03 clone

//////// 输入命令:pwd

    [me@mac ~]$ pwd
    /home/me
    [me@mac ~]$
    [ me ][0*$ me@mac:~  1-$ web01 clone  2$ dev03 clone

并且该选项卡被重命名回当前工作目录。在我通过 ssh 连接到另一台机器的任何选项卡中都不会发生这种情况。所以我认为这可能是我个人设置的问题,但我的 .bashrc、.bash_profile 或 .screenrc 文件中似乎没有任何与标题有关的内容。

答案1

您的 shell 配置正在将终端标题设置为当前正在运行的命令。这是一个相当常见的配置。由于它是由 shell 完成的,因此如果 shell 在具有不同 shell 配置的另一台计算机上运行,​​则不会完成该操作。设置屏幕窗口标题的转义序列是转义字符(字节值 27)。␛kTITLE␛\

在 bash 中,查找发出此转义序列的代码。转义字符可能表示为\e\033。该代码可以位于提示符 ( PS1) 中,也可以位于运行命令 ( ) 后显示新提示符之前执行的命令中PROMPT_COMMAND。检查它们的值(注意不要将转义序列发送到终端,以防它们包含文字转义字符):

printf 'PS1=%s\nPROMPT_COMMAND=%s\n' "$PS1" "$PROMPT_COMMAND" | cat -v

也可以在运行命令之前通过DEBUG陷阱发出此转义序列,但不太常见:

trap -p DEBUG

这些变量(或陷阱)必须在 bash 配置中设置,无论是您的配置还是系统范围的配置:通常是~/.bashrc/etc/bash.bashrc在某些系统上,但也可能是~/.bash_profile~/.profile/etc/profile~/.bash_login,或者其中之一包含的文件。您可以通过运行具有较少设置的新 shell 来缩小范围:

env -i bash                  # no environment variables or per-user settings
env -i HOME="$HOME" bash     # no environment variables, normal interactive shell
env -i HOME="$HOME" bash -l  # no environment variables, login shell
HOME=/none bash              # skips your per-user settings

通过对其中哪一个出现问题的比较,您可以知道这些设置是来自您的设置还是系统范围的设置,以及它们是来自.bashrc(由交互式 shell 读取)还是来自登录时文件(.profile等)。

答案2

PROMPT_COMMAND 在 /etc/bashrc 中设置:

if [ -z "$PROMPT_COMMAND" ]; then
  case $TERM in
  .
  .
  .
    ;;
  screen*)
    if [ -e /etc/sysconfig/bash-prompt-screen ]; then
        PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
    else
        PROMPT_COMMAND='printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
    fi
    ;;

因此,您只需在 ~/.bashrc 中将 PROMPT_COMMAND 设置为 '' 即可使其停止更新选项卡名称,例如

export PROMPT_COMMAND=''

或者,当您想要保留窗口名称时,您可以取消设置它:

unset PROMPT_COMMAND

然后使用 CTRL-a A 更改窗口名称

相关内容