第 1 回 - フィルタ,シェルスクリプトの基礎(1)

[9/21, 2009 H.Aman]
67x27(1669bytes)   67x27(1669bytes) 【課題 3】

例題 3

シェルの中では,通常のプログラミング言語と同様に変数を定義・使用できる.
例えば, コマンドプロンプト をどのようなかたちで表示するのかはシェル変数 PS1 に設定されている. つまり,この変数を変更すればコマンドプロンプトが書き換わる.

プロンプトにユーザ名も表示するように PS1 を設定しなさい. その際,プロンプトは赤色で表示しなさい.

(例)ユーザ名が e0701aman の場合:

     e0701aman$ ls 
     ...............
     ...............
     e0701aman$ 

解答例

     PS1="\[\033[31m\u\033[0m\]$ "
     

解説

色を付ける部分がやや込み入っているので, まずは色を付ける部分を後回しにして説明する.

(1)まず,シェル変数 PS1 に文字列を設定すると, それがそのまま表示される.
この時,= の前後にスペースを入れないように注意すること.
例えば

     PS1="Hello > "
と設定すれば,プロンプトは
     Hello > 
になる.

(2)次に,ユーザ名を自動的に出力するには \u を使う.
\u は特別に定義されており,現在のユーザ名を自動的に調べてくれる.
よって次のように設定すれば,各自のユーザ名が表示されるようになる:

     PS1="\u$ "
例えば,ユーザ名が e0701aman ならば
     e0701aman$ 
となる.

ここまでが,上で設定した中のユーザ名と $ マーク出力に相当する:

     PS1="\[\033[31m\u\033[0m\]$ "

(3)続いて,ユーザ名 \u に色を付ける. ここでは エスケープシーケンス というものを利用する.
まず,修飾したい部分を \[ と \] で囲み, その中に色の指定を書いていく.
色指定には \033[31m といった特殊な文字列 を用いる. これは赤色を意味しており, この特殊文字列以降をすべて赤色で表示する という意味を持つ.
ここでは 31 が赤色に対応(それ以外の部分は固定)している.
なお,このままではその後がすべて赤色になってしまうので, \033[0m でリセット する必要がある.

このことからわかるように,

     PS1="\[\033[31m\u\033[0m\]$ "
では,\u を赤色で表示するように設定されている.

(補足)

  • \033[0m でリセットするのを忘れると, キーボードからの入力もすべて赤色になってしまう.
  • 31 が赤であることは説明したが, 色に関しては 31〜37, 41〜47 が使える.
  • 自分で設定したプロンプトを常に使いたい場合は, ~/.bashrc の末尾に PS1="...." を書いておくとよい.