bashのPS1でユーザー名の特定の文字の色を変更する


9

PS1がbashで表示しているユーザー名の特定の文字の色を変更したい。

例えば:私がいる場合\urahul、私は手紙をしたいと思いh青色になると白のように休ませます。ユーザー名

\u参照し、「エンティティ」全体に色を追加するには、次のようなタグを追加します[\033[38;5;15m\]

可能であれば、同じ方法を教えてください。

回答:


13

\uエスケープを使用しないことを気にしない場合は、次のようにすることができます。

PS1="\[\e[0;31m\]${USER:0:1}\[\e[m\]${USER:1} "

これにより、プロンプトがユーザー名とスペースだけに設定されます。ユーザー名の最初の文字は赤になります。これ$USERは、特定の範囲で変数を2回展開することで機能します。最初の範囲は0から1までです。2回目は1(2番目の文字)から最後までです。

あなたが要求したようなプロンプトを取得するには、これを使用します:

PS1="${USER:0:2}\[\e[0;34m\]${USER:2:1}\[\e[m\]${USER:3} "

1
lengthを省略して、最初の文字を除くユーザー名全体のoffset${USER:1}で始まる文字列全体を出力できます。素敵な解決策!OPのリクエストに応じて、3番目のキャラクターの色を変更する方法も教えてください。
デザート

1
echo -eたとえば、次のようにテストできますecho -e "${USER:0:2}\e[0;34m${USER:2:1}\e[m${USER:3} "
デザート

2
これはさまざまな異なるユーザー名で機能する必要がありますか(たとえば、全員の3番目の文字を強調表示します)?それはあなたのためだけなら、簡単な方法は、たとえば、ユーザー名の手紙をハードコーディングするだけであるra代わりに${USER:0:2}など、
エグモント

@egmontハードコーディングは、ほとんどの場合最善の方法ではありませんが、多くの場合、明らかにはるかに単純です。このようにして、コードをグローバル構成ファイルにドロップしたり、他のユーザーと共有したりできます。また、アカウントの名前が変更された場合にも対応します。
セバスチャンスターク

1
個人的には、3つの異なる名前のアカウント間で自分のシェル構成を共有しています。しかし、おそらくここでは哲学に入るべきではありません:)
Sebastian Stark
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.