私のターミナルラッパーに奇妙な問題があります。オンラインで読んだ後、PS1の設定が原因である可能性があることがわかりました。しかし、探してみると、人々が言うものと一致するようで、私が「なのかよくわかりません。私は何か間違っているのです。
PS1='\[\e[1;36m\]\u\[\e[m\]\[\e[0;31m\]\a@\[\e[m\]\[\e[1;36m\]\aubuntu\[\e[m\]\[\e[1;31m\]\a:~>\[\e[m\]'
何が間違っているのかを理解できる人はいますか?
この問題を解決しようとした1つの方法はstty列を1000に設定することでしたが、これは他の多くの問題をさらに悪化させました(lsやvimなど)。
答え1
PS1に印刷できないすべてのバイトが含まれていることを確認してください\[ \]
。これは、適切に「エスケープ」されない限り、 bash がその長さをプロンプトの全長として計算するためです。その後、Bashはプロンプトの長さを使用して、改行が必要な時期を決定します。私はこれが長すぎるコマンドのために奇妙な改行の問題を引き起こしていると思います。
答え2
明確にするために編集されました:印刷されない色が誤ってエスケープされ、過去にも同様の問題がありました。私の場合、各エスケープシーケンスは前に来ていないため、\[
これは '\e'を認識しないことに関連している可能性があるため、\eを\033に置き換えて、常に[\033 in各[x;yzm]の前の色を表します。代わりに、これ\e[m\]
を使用する色を無効にしたいと思います(主にすべての場合で動作することを知っているためです)、プロンプトを設定してデバッグしやすくするために、以下で行ったような変数"\[\033[0m\]"
に設定することを検討できます。PMT_Color_Off
以下に私がしたことの例を示しました。
このように色落ちしていPMT_Red="\[\033[0;31m\]"
ますが、ノンチップはただRed="\033[0;31m"
使用している色をオフにしてメッセージを表示したくないPMT_Color_Off="\[\033[0m\]"
場合Color_Off="\033[0m"
私の開発コンピュータの1つにあるプロンプトの作業コピーは次のとおりです。
export PS1="\[\033[01;33m\]$(ifconfig | grep "inet" | grep -v "127.0.0.1" | awk '{print $2}' | awk -F: '{print $2}') \[\033[01;32m\]\u@\h \[\033[01;34m\]\[\033[01;33m\]\w #\[\033[00m\] "
http://www.askapache.com/linux/bash-power-prompt.htmlまた、\e の代わりに \033 エスケープを使用してください。
私はxterm、gnome-terminal、用語、フレームバッファを含むいくつかのターミナルエミュレータで私のプログラムをテストしました。