この質問は、GNU readlineプロンプトをbashスクリプトで修正するときに見つけました。 Cコードのreadlineと同様に、\[
と\]
は特別ではありませんが、\001
と\002
はとなります。特別処理bashでが得られた場合、$'string'
という形式の引用符があります。私は以前にここにいた(そして、それを$'…'
と組み合わせることが知られていなかったために満足しなかった)ので、私は解決策があるのでここで私の説明をここに残すと思った。
ここに提供されたデータを使用して、私はこの結果を締結することができたが:
C1=$'\001\033[1;34m\002' # blue - from \e[1;34m
C0=$'\001\033[0;0m\002' # reset - from \e[0;0m
while read -p "${C1}myshell>$C0 " -e command; do
echo "you said: $command"
done
これは、実際のコマンドのための色なし、myshell>
を言うとトレーリングスペースを持つ青色のプロンプトを提供します。 を打ち上げてにするか、次の行に折り返すと入力するコマンドは、印刷されない文字で混乱することはなくなりました。
としては、(Start of Text)受け入れ答え、\001
(Start of Heading)で説明した\002
ターミナルを塗装するために、それらの間には何もカウントしないのbashとのreadlineを伝えるRL_PROMPT_START_IGNORE
とRL_PROMPT_END_IGNORE
マーカーです。 (\033
は\e
よりも信頼性が高く、私は今では8進コードを使用しているので、もう1つ使用することもできます)。
これについては、ドキュメントが不足しているようです。私は見つけることができる最高は述べていた、Term::ReadLine::GnuのためにPerlのドキュメントにあった:
PROMPT
は、いくつかのエスケープシーケンスを含むことができます。 RL_PROMPT_START_IGNORE
を使用して一連の非印字文字を開始し、RL_PROMPT_END_IGNORE
を使用してシーケンスを終了します。
このようなエスケープシーケンスは、Bash固有のものです。プログラムから印刷する場合は、囲み括弧は必要ありません。 '' \ e "'というシーケンスはGCCコンパイラの拡張であり、一般的には移植性がないことに注意してください。 –
私の前のコメントを明確にするために、私は '' \ ["'と '" \] "のペアがBash固有であり、あなたがそれを必要としないことを意味します。 –
'readline(" \ [\ 033 [1; 31m $ \ 033 [0m \] ")を試したことがありますか? '\ e'ではなく' \ 033' –