设置 xterm 标题在 ssh 上不起作用

设置 xterm 标题在 ssh 上不起作用

我跟着unix 系统发布并添加了该行,

trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUG

到我的.bashrc文件中,将我的最后一个命令设置为终端标题。它在我的 ubuntu 台式机上运行良好。

当我将此行添加到 Centos 服务器的.bashrc文件并通过 ssh 进入 Centos 计算机时,它不再起作用。 SSH 客户端标题已变为空白,并且在每个命令后都会在我的控制台上打印所有垃圾内容,

Last login: Sun Jun  7 21:28:29 2015 from sk-box
]2;printf "k%s@%s:%s]0;printf "k%s@%s:%s" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"[root@sk-vbox ~]# cd
]2;printf "k%s@%s:%s]0;printf "k%s@%s:%s" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"[root@sk-vbox ~]# pwd
/root
]2;printf "k%s@%s:%s]0;printf "k%s@%s:%s" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"[root@sk-vbox ~]# 

是否可以确保动态标题在 ssh 上运行良好?

答案1

PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUG

这两个命令互相干扰。BASH_COMMAND最终包含PROMPT_COMMAND,而不是之前执行的命令。由于PROMPT_COMMAND包含一个\007(反斜杠扩展后的响铃字符),它是标题文本的结束标记,因此结果非常混乱 - 您会看到提示之前的字符串,并且在打印PROMPT_COMMAND第二个时响铃响起。\007您还在 中执行额外级别的反斜杠扩展BASH_COMMAND

将 DEBUG 陷阱替换为更强大的陷阱,该陷阱不会打印特殊字符:

trap 'printf "\033]0;%s\007" "${BASH_COMMAND//[^[:print:]]/}"' DEBUG

相关内容