9

問題を示すビデオ: http ://www.mentaframework.org/download/TerminalBug.mov

Terminal.appで入力して行の終わりに達すると、次の行が最初の行の上から始まり、すべてが上書きされます。次に、削除キーを使用すると、すべてが台無しになって消えます。

同じ端末で別のホストに対してsshを実行しましたが、正常に機能しました。シェル構成に問題がある可能性がありますか?

映画を見て、何が起こるかを確認してください。

ありがとう、

-セルジオ

4

2 に答える 2

18

色付きのプロンプトを設定しているPS1変数のエスケープコードをマークする必要があります。シェルは、印刷できないことを認識する必要があります。そうすると、行の折り返しが適切に計算されます。

説明といくつかの例へのリンクは次のとおりです。

http://www.artemfrolov.com/articles/coloured-bash-prompt

簡単なヒント:

\[     begins a sequence of non-printing characters
\]     ends a sequence of non-printing characters
于 2009-10-02T21:19:01.443 に答える
1

http://www.artemfrolov.com/articles/coloured-bash-promptは現在空白です(たとえば、Chrome / Firefox / Operaにアクセスして、空白だけを表示し、コンテンツは表示しません)。したがって、ここで例を検討した後、次のように変換していることがわかります。

export PS1='\e[0;32m\u@\h\e[m \D{%b %d} \t $ '

壊れます、

export PS1='\[\e[0;32m\]\u@\h\[\e[m\] \D{%b %d} \t $ '

私にとってはうまくいくようです(追加の具体的な例として)。

個別に、少しトピックから外れていますが、(少なくとも私の参照では)便利です:プロンプトで役立つ「圧縮パス」と太字の緑色のuser @ hostを使用して上記をアップグレードするには:

export MYPS='$(echo -n "${PWD/#$HOME/~}" | awk -F "/" '"'"'{if (length($0) > 14) { if (NF>4) print $1 "/" $2 "/.../" $(NF-1) "/" $NF; else if (NF>3) print $1 "/" $2 "/.../" $NF; else print $1 "/.../" $NF; } else print $0;}'"'"')'
export PS1='\[\e[1;32m\]\u@\h\[\e[m\] \D{%b %d} \t $(eval "echo ${MYPS}")$ '

**編集**:このPS1割り当て(2行目)のimoは、はるかに読みやすくなっています。

export MYPS='$(echo -n "${PWD/#$HOME/~}" | awk -F "/" '"'"'{if (length($0) > 14) { if (NF>4) print $1 "/" $2 "/.../" $(NF-1) "/" $NF; else if (NF>3) print $1 "/" $2 "/.../" $NF; else print $1 "/.../" $NF; } else print $0;}'"'"')'
export PS1='$USER@\[$(tput bold)\]$(hostname -s)\[$(tput sgr0)\] \D{%b %d} \t $(eval "echo ${MYPS}")$ '
于 2011-09-24T04:01:12.733 に答える