我跟着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