変数を使用してPS1のターミナルカラーコードを保存しますか?

変数を使用してPS1のターミナルカラーコードを保存しますか?

鉱山では、.bashrcANSI端末の色コードを使用して個々のビットの色を指定します。次のようになります。

PS1='\u@\h:\w\[\033[33m\]$(virtual_env)\[\033[32m\]$(git_branch)\[\033[0m\]$ '

wherevirtual_envgit_branchはstdoutにコンテンツを印刷するbash関数です。

今すぐ読みやすくするためにカラーコードを直接挿入するのではなく、変数に保存して参照したいと思いますPS1。だから、次のような変数がたくさんあります。

GREEN="\[\033[32m\]"
YELLOW="\[\033[33m\]"
RESET="\[\033[0m\]"

私は次のようなものを書くことを望みます:

PS1='\u@\h:\w${YELLOW}$(virtual_env)${GREEN}$(git_branch)${RESET}$ '

しかし、これはうまくいきません。カラーコードがエスケープされたかのようにプロンプ​​トに表示されます。代わりに二重引用符を使用すると、色は正しく機能しますが、PS1プロンプトが変更された場合にのみこれを実行しますsource ~/.bashrc

私は人々がしている他のことを試しました。を使用してprintf、色に一重引用符を使用し、\[色変数の代わりにとを入力しましたが、何も機能しないようです。\]PS1

カラーコード変数の使い方は?

ベストアンサー1

解決策は、プロンプトを定義するときにシェルにカラー変数を置き換えさせることです。しかし、関数はそうではありません。これを行うには、最初に試したように二重引用符を使用しますが、ヒントが描画される前に評価されないようにコマンドをエスケープします。

PS1="\u@\h:\w${YELLOW}\$(virtual_env)${GREEN}\$(git_branch)${RESET}$ "

各コマンドの前に\$()

これをエコーすると、次のようになります。

echo "$PS1"
\u@\h:\w\[\033[33m\]$(virtual_env)\[\033[32m\]$(git_branch)\[\033[0m\]$ 

ご覧のとおり、カラー変数は置き換えられますが、コマンドは置き換えられません。

おすすめ記事