シェル上のプロンプトの確認や設定

プロンプト?

 シェル上(bash, csh など) ではコマンドを入力するコンソール(キーボード入力のための場所が点滅している地点)の事をプロンプトと呼びます。
 Fedora/Red Hat では、初期状態では以下のような形式です。

[ユーザ名@ホスト名 ~]$

 たとえば、ユーザ名が sakura、ホスト名が sion の場合

[sakura@sion ~]$ 

 と表示されます。~ は「該当ユーザのホームディレクトリ」という意味です。
 たとえば、カレントディレクトリが /var/tmp の場合には

[sakura@sion tmp]$ 

 このようにディレクトリ名が表示されます。

どうやって確認するの?

 プロンプトの設定はシェル変数(環境変数)によって定義されます。
 bash の場合 PS1 という名前のシェル変数です。なぜ PS1 なのかは、マニュアルによると "The primary prompt string"=プライマリ(1番目の)プロンプト文だからです。"The secondary prompt string"という2番目のプロンプト文を示す PS2 もあります。行継続用プロンプト文です。『 \ 』を使って次行に引き渡されたときの指定です。標準は『 > 』です。
 プレステ(PlayStation? は関係ありません)
Csh の場合は prompt です。
 現時点で実際にどんなシェル変数の指定がされているかは、echo コマンドで確認できます。

$ echo $PS1
[\u@\h \W]\$

 \u … ユーザ名
 \h … ホスト名
 \W … カレントディレクトリ
 \$ … $という文字(画面上に $ を表示させるという意味)だけじゃなくて、一般ユーザであれば『 $ 』、root ユーザ(UID が 0) であれば『 # 』を表示させます。

設定方法は?

簡単な設定方法

 プロンプトを設定するには、bash の場合、シェル変数 PS1 を変更して指定できます。

 例)

$ PS1='promtp$ '
prompt$ 

 この例では、コマンド実行後にプロンプトが『 prompt$ 』に変更となります。  PS1= の後が ' (シングルクォート)で囲まれているのは特殊文字を解釈しないようにする、という意味があります。たとえば『 $ 』は変数を表しますが、シングルクォート内では単に『 $ 』という文字を表示させることが出来ます。" (ダブルクォート)で『 $ 』を表示させたい場合は 『 \$ 』のように記述しなくてはいけません。

時刻を表示させてみよう

 時刻を表示させる場合 \t を使います。
 複数のターミナルを開いている場合、時刻が表示されることによって、状況を把握しやすくすることが出来ると思います。

$ PS1="[\u@\h \t \W]\$ "
[sakura@sion 16:55:50 ~]$

 このようにして、時刻を表示させる事が出来ます。表示順番は自由に出来ます。たとえば、一番左に時刻を持ってきたい場合は次のように \t を左に持ってきます。

$ PS1="[\t \u@\h \W]\$ "
[16:55:50 sakura@sion ~]$

シェル変数をプロンプトに組み込んでみる

 それぞれシェル変数をプロンプトで用いることもできます。

  • $USER … ユーザ名
  • $HOSTNAME … ホスト名
  • $TERM … 端末名
  • $PWD … カレントディレクトリ

 設定例)

$ PS1='[$USER($TERM)$HOSTNAME $PWD]$ '
[sakura(vt100)sion /usr/local]$

その他の変数を使って、色々なものを表示させる

 先の変数のほかに、バックスラッシュ『 \ 』でエスケープした文字を使うことが出来ます。

\aベル(ビープ音)をならします(ASCII のベル文字 07)
\d"曜日 月 日"の形式の日付
\hホスト名(最初の . までの名前)
\Hホスト名
\n改行
\r復帰
\sシェル名(標準だと -bash が表示)
\t時刻 HH:MM:SS 形式(24時間) H = Hour = 時、M = Minutes = 分、S = Seconds = 秒
\T時刻 HH:MM:SS 形式(12時間)
\@時刻 am/pm をつけたもの。Lang=Jaの場合 HH:MM (午前|午後)となる。
\u現在のユーザー名
\vbash のバージョン
\Vbash のバージョン・リリース番号など詳細
\w現在のディレクトリ(フルパス)
\W現在のディレクトリ名
\!コマンドのヒストリー番号
\#コマンドのコマンド番号(ログイン後何回実行したか)
\$UID が 0 であれば『 # 』、それ以外は『 $ 』
\\バックスラッシュ
\[表示されない文字列(エスケープシーケンス/端末制御シーケンス)を埋め込む
\]表示されない文字列の終わり

外部コマンドを使ってみる例(load average の表示)

 サーバの負荷(load average)を調べるのは uptime コマンドです。

$ uptime
 18:07:24 up  7:04,  3 users,  load average: 0.00, 0.00, 0.00

 load average: の次にあるのが過去 1 分の平均負荷、5 分の平均負荷、15 分の平均負荷です。

 プロンプトにコマンドを埋め込むには【 \$(コマンド) 】を用います。

$ PS1="[\$(uptime) ]\$ "
[ 18:10:54 up  7:08,  3 users,  load average: 0.00, 0.00, 0.00 ]$

 こうしておけば、サーバの負荷が頻繁に変動する場合(システムのチューニングを行っている時など)に役立つことができます。他のコマンドも任意に実行することが出来ます。
 適当に値を返すためのシェルスクリプトを予め準備しておいて、それを動作させる方法も有りですね

色を付ける

 プロンプトで色をつけるためには【 \[\033[ 】と【 m\] 】で色指定をすることができます。  たとえば、プロンプトを【 赤色 】にしたい場合は【 \[\033[0;31m\][\u@\h:\W]$ " 】です。

$ PS1="\[\033[0;31m\][\u@\h:\W]$ "

色の対応表

黒色(Black)0;30
青色(Blue)0;34
緑色(Green)0;32
水色(Cyan)0;36
赤色(Red)0;31
紫色(Purple)0;35
明灰色(Light Gray)0;37
暗灰色(Dark Gray)1;30
Light Blue1;34
Light Green1;32
Light Cyan1;36
Light Red1;31
Light Purple1;35
黄色(Yellow)1;33
白色(White)1;37

 背景色も文字色同様に指定出来ます。
 背景色が青で文字が赤の場合は

$ PS1="\[\033[44;1;31m\][\u@\h:\W]$ "

 となります。見づらいですが…。41 が赤です。青は 44 という風になっています。

 すべての属性を無効にするのは [0m です。

$ PS1="\[\033[0m\][\u@\h:\W]$ "

設定をログインする度にするのは面倒なんだけど……

 ~/.bashrc ファイル( ~ はホームディレクトリの意味:/home/ユーザ名/)の末尾の方に PS1='〜' の記述を追加しておけば OK です。ログインする度にわざわざ指定する必要はありません。
 ~/.bash_profile への記述だと、非対話型のシェルスクリプトによってシェルが呼ばれる度(何かシェル・スクリプトを実行する度)に PS1 情報は失われます。記述は .bash_profile ではなく .bashrc へ記述するのが適切です(Bash-Prompt-HOWTOより)。


参考資料
Bash Prompt HOWTO (JF)

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: Mon, 13 Jun 2005 18:31:59 JST (6890d)