シェルで奇妙に繰り返されるコマンド

シェルで奇妙に繰り返されるコマンド

システムを起動してログインした後(Xを起動する前にstartxを介して手動で起動しました)、コマンドを入力すると、突然次のような出力が表示されます。

$ cmd
;user@host: cmd;cmd;cmd;

[output of 'cmd']

$

これは、Xを起動して端末を起動した後に停止します。 Xを終了した後、通常のTTYで再び発生します。

私は現在zshと「oh-my-zsh」を使用しています。それはそこでのみ発生し、bashを使用するときは発生せず、ユーザー名の前にはセミコロンしかありません。

ここで何が起こっているのか、それを避ける方法を知っている人はいますか?

答え1

設定は、zshコマンドを呼び出す前にタイトルバーまたは使用するターミナルアプリケーションを設定することです。xtermターミナルでは、傍受はエスケープシーケンスを印刷してこれを行います。残念ながら、端末エミュレータだけがこの順序を理解し、コンソールにいるときにゴミだけを見るでしょう。

zshこれを実行または実行しないように構成するには、事前実行フックを適切に設定します。

参考までに私が抜粋した内容は次のとおりです.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

外部は、ifX 内部でのみ precmd と preexec フックを設定することを保証します。

関連情報