web-dev-qa-db-ja.com

.bashrc edit端末コマンドをめちゃくちゃにする

Ubuntuのターミナルプロンプトをより個人的な見た目にし、コマンドを書くときに「$」の前のテキストを変更したかったのです。

私が見つけたものから、これはホームディレクトリの.bashrcファイルを編集することで行われているので、そこに行って変更しました

if [ "$color_Prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

if [ "$color_Prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='\e[1;32m[\W]\$ \e[m'
fi

これは機能し、ターミナルは私が望むように見えます。

しかし、矢印キーを使用してコマンド履歴にアクセスするときに、いくつかのコマンドを入力するとしばらくすると、事態は奇妙になります。

きれいな行から矢印キーを押すのが効果的です。もう一度押すと、行にあったテキストは約15文字で制限され、履歴内の新しいコマンド(表示されるはずです)は最初の数文字で制限され、それらは結合されますコマンドラインで。

例えば。私の最近の2つのコマンドは

Java Test4 words-250.txt words-250-in.txt
Javac Test4.Java

上矢印キーを1回押すと、最初の行が表示されます。もう一度押すと、これが表示されます:

Java Test4 worc Test4.Java

この奇妙な出力にもかかわらず、端末は正常に動作します。たとえば、上記を実行した後にEnterキーを押すと、Javac Test4.Javaが実行されます。代わりにバックスペースを使用して行全体を削除しようとすると、行が言うまでしか削除できません

Java Test4

そして、その後Enterを押すと、まるでEnterを押したときに行が空だったかのように、新しい空の行を取得します。

.bashrcファイルをリセットすると、これらはすべてなくなります。

なぜこれが起こり、どうすれば修正できますか?

5
darksmurf

理由はわかりません(エスケープコードを実際に理解したことはありません)が、他のプロンプトの適応は機能しているようです

PS1='\[\033[1;32m\][\W]\$ \[\033[00m\]'

どうやら、エスケープシーケンスを \[...\] で囲む必要があります。これは、bashにプロンプ​​ト幅を決定するときにそれらをカウントしないように指示するためです。したがって、上記のPS1と以下の両方が同様に機能します。

PS1='\[\e[1;32m\][\W]\$ \[\e[m\]'
6
muru