特定のコマンドを上向き矢印で「保存」する端末プロンプト


5

楽しみのためにプロンプ​​トにシェルスクリプトを少し追加しました。プロンプト項目の色をランダムに交互にします。しばらくすると灰色の画面が退屈になるので、私はそれを純粋にやりました。以下は、.bash-profileのプロンプトです。

function next_hue
{
    color1=$((31 + (++color % 7)))   # set 31 to 30 for dark on light
    color1=$((31 + (++color % 7)))
    PS1="\n\e[0:${color}m[\W]\n\e[0:${color}m[\u]-> $reset" # set 1 to 0 for     dark on light
}

これにより、プロンプトの色が変わります。わーい!

問題は、シェルが「スタック」する場合があることです。たとえば、シェルは通常次のようになります。

directory
[username]->

最近docker runコマンドを実行し、履歴に上矢印を押すと、 `docker runがスタックし、これで終わります:

directory
[username]->docker run

新しいコマンドを追加すると、次のようにスタックされdocker runます:

directory
[username]->docker runcd /some/path

ctrl-cまたは他のそのようなオプションを使用する必要があり、docker-runすべて入力しない限り、コマンドを再度使用することはできません。このエラーの原因は何ですか?私は自分のプロンプトをかなり見ましたが、大丈夫だと思いますが、そもそも理解するのは混乱していました。


どこnext_hueから電話しますか?
nohillsideの

私はそれがあなたのプロンプトに関連するとは思わない。コマンド履歴をいじって〜/ .inputrcに奇妙な何かがある可能性が高いです。
jmhindle

回答:


2

プロンプトで非表示文字をエスケープしていません。この記事を参照し、色の周りに「\[」と「\]」を使用します。たとえば、このような(テストされていない)...

PS1="\n\e[0:\[${color}\]m[\W]\n\e[0:\[${color}\]m[\u]-> $reset"

あなたはそれをtweekする必要があるかもしれません。私が言ったように、これはテストされていないので\]、カラーコードの途中に" " を挿入した可能性があります。私のプロンプトでは、色変数を初期化するときにエスケープします:

PS1_FG="\[$(tput setaf 223)\]"  # Prompt foreground colour (223 = pale orange/brown)

価値のあるものについてtputは、制御コードを扱うときに使用することを強くお勧めします。スクリプトの移植性が高まり、(IMHO)が読みやすくなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.