web-dev-qa-db-ja.com

zshのユーザーまたはrootに応じてプロンプトの色を変更する

zshでは、%#(またはPrompt変数)にPS1を含めることができます。これは基本的に、ユーザーの場合は%を表示し、ルートの場合は#を表示します。 %または#がユーザーまたはルート(ルートの場合は赤、ユーザーの場合は青)であるかどうかに応じて色を変更できるように、これに影響を与える方法があるかどうか疑問に思いますルートのPS1~/.zshrcに変更するだけですが、これはすでに特別な記号であるため、両方に同じPS1を使用する方法がないのではないかと考えています。 ... zshのように%#に固有の何か(if thenステートメントのように私ができる他のハックがあると確信しています)。

13
xenoterracide

%(!.%{\e[1;31m%}%m%{\e[0m%}.%{\e[0;33m%}%m%{\e[0m%})

Rootの場合、ホスト名(_%m_)を別の色(赤)に変更するべきです。私はそれをテストするzshシェルを持っていませんが、それは正しいようです。

理由は次のとおりです。

%(x.true.false) :: 3項の最初の項の評価に基づいて、正しいステートメントを実行します。 「!」シェルに特権がある場合はtrueです。実際、_%#_は%(!.#.%)のショートカットです。

_%{\e[1;31m%} %m %{\e[0m%}_ :: _%{\e[X;Ym%}_は、Xをフォーマット(太字、下線など)とし、Yをカラーコードとするカラーエスケープシーケンスです。色を変更したい用語の周りのシーケンスを開いたり閉じたりする必要があることに注意してください。そうしないと、そのポイント以降のすべてが任意の色になります。ここでは、わかりやすくするために、プロンプト用語_%m_の前後にスペースを追加しました。

http://www.nparikh.org/unix/Prompt.php には、zshのカラーテーブルやその他の利用可能なオプションに関するオプションや詳細がさらにあります。

8
nzwulfin
autoload colors
colors
PS1="%~ %{%(#~$fg[red]~$fg[blue])%}%#%{$fg[default]%} "

%(#は、シェルがrootとして実行されているかどうかをテストします。これを%(!に変更すると、シェルが昇格された特権で実行されているかどうかがテストされます(これはnewgrpなどをカバーしますが、rootとしてログインしません)。