1

シェル プロンプトに動的な情報を書き込むコマンドを実行したいと考えています。\[エスケープ文の\]前後に置くことができるので、静的に色付けを行うとうまくいきます。

 '\[\e[0;91m\]$(printSomething)\[\e[0m\]'

しかし、カラーリングが動的で、外部スクリプトでそれを印刷したい場合、それは機能しません。これで、エスケープ シーケンスを PS1 に直接書き込むことができなくなりました。しかし、外部スクリプトが and を出力する\[\]、シェルは文字どおりに表示します。

それを機能させる方法はありますか?

4

1 に答える 1

2

表示するたびPROMPT_COMMANDに でリセットしてください。PS1元のプロンプトを取得するには:

prompt_cmd () {
    PS1='\[\e[0;91m\]'
    PS1+=$(printSomething)
    PS1+='\[\e[0m\]'
}

PROMPT_COMMAND=prompt_cmd

別の色が必要だと思います。これを行うには、次のような環境変数を使用できprompt_cmdます。

prompt_cmd () {
    PS1="\[\e[0;${PROMPT_COLOR}m\]" # note the double quotes
    PS1+=$(printSomething)
    PS1+='\[\e[0m\]'
}

prompt_cmdまたは、使用する色を決定するコードを実行することもできます。

于 2013-11-22T16:59:14.470 に答える