巧みなコマンドラインDIYあなたのxterm色for linux


上記の例では、ps 1変数に表示されると、bashは特定の値で置き換えられるように、bashにユーザ名とホスト名をプロンプトラインに挿入するように通知する専用の文字列を使用しています.シーケンス「u」(ユーザー名を表す)と「H」(ホスト名の第1部を表す)を使用しました.以下はbashが認識できるすべての専用シーケンスの完全なリストです(bash man pageの「PROMPTING」セクションでこのリストを見つけることができます):

      
\a ASCII     (      \007) 
\d "Wed Sep 06"       
\e ASCII     (      \033) 
\h         (  "mybox") 
\H      (  "mybox.mydomain.com") 
\j    shell      ^Z        
\l   shell       (  "ttyp4") 

\r \s shell ( "bash") \t 24 ( "23:01:01") \T 12 ( "11:01:01") \@ am/pm 12 \u \v bash ( 2.04) \V Bash ( ) ?/td>; \w ( "/home/drobbins") \W “ (basename)”( "drobbins") \! \# ( , ) \$ (root), "$"; , "#" \xxx xxx( , "\007") ASCII \\ \[ ( ) 。 bash 。 \] 。

これにより、bashで反スラッシュで変換されるすべての専用シーケンスがわかりました.これらのシーケンスを少し練習して、それらの仕事の方法に対していくつかの感性の認識を得てください.いくつかのテストを行った後、下から色を追加します.
カラー化
色を追加するのは簡単です.最初のステップは、色のないプロンプトラインを設計することです.次に、bashではなく端末が識別できる専用エスケープシーケンスを追加して、テキストの一部をカラーで表示するだけです.標準LinuxターミナルとXターミナルでは、前景(文字)の色と背景の色を設定できます.必要に応じてbold文字を有効にすることもできます.8色から選べます.
色は、PS 1に専用シーケンスを追加することによって選択されます.基本的には「e[」(エスケープかっこ)と「m」の間に挟まれた数値です.1つ以上の数値コードを指定すると、セミコロンで区切られます.次の色コードの例を示します.
"\e[0m"
数値コードをゼロに指定すると、前景、背景、太字の設定をデフォルト値にリセットするように端末に通知されます.プロンプトラインの終了時にこのコードを使用して、入力したテキストを非カラーにすることができます.では、これらの色コードを見てみましょう.次のスクリーンショットの結果に注意してください.
カラーテーブル
このテーブルを使用するには、まず使用する色を検索し、対応する前景番号(30-37)と背景番号(40-47)を検索します.たとえば、黒の緑の文字が好きな場合は、32と40に番号を設定できます.プロンプトライン定義を開き、適切な色コードを追加します.次の定義:
export PS1="\w>; "
次のようになります.
export PS1="\e[32;40m\w>; "
今まで、ヒント行はもういいですが、あまり完璧ではありません.bashに作業ディレクトリが表示されたら、「e[0 m」シーケンスを使用して色を正常値に再設定する必要があります.
export PS1="\e[32;40m\w>;\e[0m"
この定義には、きれいな緑のヒント行が表示されますが、掃除をする必要があります.バックグラウンドを黒に設定し、黒がデフォルトの色であるため、「40」というバックグラウンドカラー設定を含める必要はありません.また、緑は暗いです.この問題を修正するには、「1」色コードを追加します.これにより、より明るい太字文字が有効になります.この修正に加えて、すべての非印刷文字を専用bashエスケープシーケンス「[」と「]」で囲む必要があります.この2つのシーケンスはbashに通知され、囲まれた文字が行のスペースを占有しないため、自動改行が正常に動作し続けることができます.この2つのエスケープシーケンスはありません.非常にきれいなプロンプトラインがありますが、入力したコマンドが端末の右端に適切に到着すると、表示が混乱します.次は最終的なヒントです.
export PS1="\[\e[32;1m\]\w>;\[\e[0m\]"
次のように、同じプロンプトラインでいくつかの色を使用する心配はありません.
export PS1="\[\e[36;1m\]\u@\[\e[32;1m\]\H>;\[\e[0m\]"
Xtermでの楽しみ
プロンプトラインに情報と色を追加する方法について説明しましたが、さらに進みます.プロンプトラインに専用コードを追加することで、rxvtやatermなどのX端末のタイトルバーを動的に更新できます.以下のシーケンスをPS 1プロンプトラインに追加するだけです.
"\e]2;titlebar\a"
サブストリング「titlebar」をxtermタイトルバーに表示したい文字に置き換えるだけで、すべてが完了しました.静的文字を使用する必要はありません.bashエスケープシーケンスをタイトルバーに挿入できます.次の例を参照してください.ユーザー名、ホスト名、および現在の作業ディレクトリをタイトルバーに表示し、短くて明るい緑色のプロンプト行を定義します.
export PS1="\[\e]2;\u@\H\w\a\e[32;1m\]>;\[\e[0m\] "
これが私が上のスクリーンショットの結果で使ったヒント行です.私はこのヒント行が好きです.それはすべての情報をタイトルバーに表示するので、端末に表示するのではなく、端末が1行に対してどれだけの文字を表示できるかに制限があります.ちなみに、タイトルバーのシーケンスを「[」と「]」で囲んでください(端末では印刷シーケンスではないため).タイトルバーに大量の情報を配置する問題は、システムコンソールなどの非グラフィック端末を使用すると、これらの情報が表示されないことです.この問題を解決するために、あなたのbashrcに次の行を追加します.

if [ "$TERM" = "linux" ] 
then 
#we're on the system console or maybe telnetting in 
export PS1="\[\e[32;1m\]\u@\H >; \[\e[0m\]" 
else 
#we're not on the console, assume an xterm 
export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>;\[\e[0m\] " 
fi 


このbash条件文は、現在の端末に基づいて動的設定プロンプト行を設定します.一貫性を得るためには、~/.を構成する必要があります.bash_profileは、起動時に~/を検索するようにします.bashrc.あなたの~/.bash_profileファイルには、次の行があります.