当我使用 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 更改窗口名称