启动系统并登录后(在启动 X 之前,我通过 startx 手动启动它),输入命令后突然得到以下输出:
$ cmd
;user@host: cmd;cmd;cmd;
[output of 'cmd']
$
启动 X 并启动终端后,此操作停止;终止 X 后,它会在普通 TTY 上再次发生。
我目前正在使用 zsh 和“oh-my-zsh”。它只发生在那里,当使用 bash 时它不会发生,用户名前面只有一个分号。
有人知道这里发生了什么以及如何避免它吗?
答案1
您的配置是在调用命令之前zsh
设置标题栏或您使用的任何终端应用程序。xterm
它通过打印出终端截获的转义序列来实现这一点。不幸的是,只有终端模拟器才能理解这个序列,当你在控制台上时,你只会看到垃圾。
要配置zsh
执行(或不执行)此操作,请适当设置 preexec 挂钩。
作为参考,以下是我的摘录.zshrc
:
if [[ $TERM == "xterm" ]]; then
if [[ -n $SSH_TTY ]]; then
precmd () { print -Pn "\033]0;$HOST: %~\007" }
preexec () { print -n "\033]0;$HOST: $1\007" }
else
precmd () { print -Pn "\033]0;%~\007" }
preexec () { print -n "\033]0;$1\007" }
fi
fi
外部if
确保我们仅在 X 内部时设置 precmd 和 preexec 挂钩。