2

私のMacターミナルでは、前のコマンドを表示するために数回押した後、コマンドがターミナルでスタックします。こんな感じで、

普通:

[ 10:23:34 ] > MY_COMMAND

数回押し上げた後

[ 10:23:34 ] > git commit -mMY_COMMAND
[ 10:23:35 ] > git commit -mMY_COMMAND
[ 10:23:36 ] > git commit -mMY_COMMAND

ターミナルで「clear」と入力するまで、git commit -mそこに留まっています。これを修正するにはどうすればよいですか?

4

1 に答える 1

2

最も可能性の高い原因は、PS1プロンプト文字列の形式が正しくないことです。非印刷制御文字をプロンプトに入れる場合\[ … \]、プロンプトの幅を計算するときにそれらをカウントしないように Bash に指示するために、それらを で囲む必要があります。

幅の計算が正しくない場合、コマンドラインの表示は、説明した方法を含め、いくつかの方法で混乱する可能性があります。

あなたが書いたコメントで:

これは私の .bash_profile export PATH=${PATH}:/Users/offirgolan/android-sdk-macosx/platform-tools export TERM="xterm-color" alias ls="ls -G" export PS1="\e[ 1;30m][\e[\e[1;30m]\e[1;33m] \u@\H [\e[1;32m]\w[\e[0m] \e[1;30m] ]\n[[ \e[1;31m]\T[\e[0m]\e[1;30m] ] > \e[37m]"

先頭のバックスラッシュのないすべての余分なブラケットのために、ブラケットを含めることを意図していたように見えますが、それらは一貫性がなく、文字列には\e[\e[. プロンプトにどのブラケットを表示するつもりだったのか、どの色にしたいのかを判断するのは難しいですが、PS1もっと似ているはずです

PS1='\[\e[1;30m\][\[\e[1;30m\e[1;33m\] \u@\H [\[\e[1;32m\] \w\[\e[0m \e[1;30m\]]\n[ \[\e[1;31m\]\T\[\e[0m\e[1;30m\] ] > \[\e[37m\]'

プロからのヒント:プロンプトでターミナル コマンドをハードコーディングしないでください。それらは移植性がなく、すべてのターミナルで動作するわけではありません。代わりにtput、現在の端末に適したコマンド シーケンスを選択するために使用します。例えば

PS1="\[$(tput setaf 1)\]Red Text\[$(tput sgr0)\] \$ "

プロンプト「Red Text $」と「Red Text」が赤色で表示されます。これにより\[ \]、文字列にリテラルのエスケープ文字が散らばっていないため、ブラケットが正しいかどうかを確認するのがはるかに簡単になり、ニーモニックtputコードにより、送信されているコマンドを簡単に把握できます。

于 2015-12-16T13:04:50.800 に答える