zsh
これを試して:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|grep --color=always /)%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
プロンプトの内訳は次のとおりです。
- PROMPT_SUBSTは、プロンプトでのコマンド置換(およびパラメーター展開と算術展開)をオンにします
%{...%}
-エスケープシーケンス
$(pwd|grep --color=always /)
-現在のディレクトリを印刷して強調表示します/
-色は$ GREP_COLORS環境変数(またはデフォルト値)に依存します-太字の赤はデフォルトです
%${#PWD}G
-現在のディレクトリの名前の文字数をグリッチ値として使用します。これにより、シェル%{
は、ANSIエスケープシーケンスを含む文字列の実際の長さではなく、これを前の文字シーケンス( " "の後)の長さと見なします。これにより、プロンプトの終わりに対するカーソルの位置に関してシェルが混乱するのを防ぎます。
- - - - - - - これは、あなたの質問に答える部の端です - - - - - - -
%(!.%F{red}.%F{cyan})
-これが特権シェル(ルート)の場合、前景色を赤に設定し、そうでなければシアン
%n
-ユーザー名を出力する
%f
-前景色をデフォルトにリセットします
@
-リテラルのアットマーク
%F{yellow}
-前景色を黄色にする
%m
-ホスト名を出力する
%f
-前景色をデフォルトにリセットします
%(!.%F{red}.)
-これが特権シェル(ルート)の場合、前景色を赤に設定します
%#
- #
特権シェルまたは%
非特権シェルの出力
%f
-前景色をデフォルトにリセットします
質問はパスに関するものであるため、強調するためにこのプロンプトでパスを最初に配置しました。
以下は、$GREP_COLORS
変数を操作することにより、root(特権)であるかどうかに応じてスラッシュの色を変更するzshのバージョンです。
setopt PROMPT_SUBST
PROMPT='%{$(pwd|([[ $EUID == 0 ]] && GREP_COLORS="mt=01;31" grep --color=always /|| GREP_COLORS="mt=01;34" grep --color=always /))%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
バッシュ
Bashでも同様のプロンプトを実行できます。この例では、ユーザーとホスト名を最初に配置し、UIDが0の場合はスラッシュの色も変わり$PS1
ます。警告:これはBashのプロンプト変数を上書きします。何か特別なことをしている場合、またはその変数を直接設定して、これが有効になっているときに動作が変化することを期待しない限り、これは問題になりません。また、これは「usercolor
」と呼ばれる変数を使用します。これは他の何かと衝突する可能性がありますが、この全体を関数に入れて変数をローカルと宣言することもできます。
PROMPT_COMMAND='usercolor="\[\033[0;36m\]";[[ $EUID == 0 ]] && usercolor="\[\033[1;31m\]";PS1="$(pwd)";PS1="$usercolor\u\[\033[0m\]@\[\033[0;33m\]\h\[\033[0m\]:${PS1//\//$usercolor/\[\033[0m\]}$usercolor\\$\[\033[0m\] "'
Bashにはパラメーター拡張置換を使用して条件付きで(grepを使用するのではなく)スラッシュを色付けするzshの「グリッチ」機能がないという事実を利用しました。