在 shell 中神秘地重复输入命令

在 shell 中神秘地重复输入命令

启动系统并登录后(在启动 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 挂钩。

相关内容