3

コンソールに入力されたステートメントを循環すると、入力したテキストが更新されず、プロンプトが右に移動することがあります。

私の元の意図されたプロンプト:http ://cl.ly/image/04080N260L1V 。

上矢印と下矢印を約12回押した後に何が起こるか:http://cl.ly/image/1n3S2K31340R

スクリーンショットがはっきりしない場合は、下線付きのテキスト(この場合は「vim ~/.bas」)がプロンプトに「追加」されます。削除できません。ただし、可能な限り削除し、プロンプトののテキストをクリアしてEnterキーを押すと、元のクリーンなプロンプトが再び表示されます:http: //cl.ly/image/2O1h1Z2y0n2I

内容~/.bash_profileは次のとおりです。

# Simpler bash prompt in Terminal.app
promptColor="\e[1;34m"
endColor="\e[m"
#export PS1='\e[0;36m\w$ \e[0m'
export PS1="$promptColor\w$ $endColor"

# Syntax highlighting for commands like `ls` and such
alias ls="ls -G"

# PATH ammendment to put Homebrew-installed apps in front of system-provided ones
homebrew=/usr/local/bin:/usr/local/sbin:/usr/local/share/npm/bin
export PATH=$homebrew:$PATH

犯人をPS1変数に絞り込みました。(これをいくつかの異なる方法で試したことがわかります。)私が読んだ内容に基づいて、私はカラーコードを正しく使用しています。

どんな助けでも素晴らしいでしょう。ありがとう。

4

2 に答える 2

2

これはよくある質問です。Bash がプロンプトの表示長を正しく計算できるようにするには、カラー コードなどの非印刷シーケンスをシーケンス内に含める必要があり\[...\]ます。

于 2012-12-03T20:33:37.750 に答える
0

私はあなたが欲しいと思います:

promptColor='\e[1;34m'
endColor='\e[m'
export PS1="$promptColor"'\w$ '"$endColor"

(二重引用符から単一引用符へのすべての微妙な変更に注意してください)

問題は、明示的に解釈する必要がある場合に、bash が以下の展開を行っていることです。

  • \e[1;34m
  • \w$
  • \e[m

単一引用符と二重引用符は、シェルでは異なるものを意味します:強い引用と弱い引用

また、エスケープ文字を含む行をコピーして貼り付けて変更します (リテラル表現とは異なることに注意してください)。

于 2012-12-03T20:27:24.567 に答える