シェル上のプロンプトの確認や設定
プロンプト?
シェル上(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 | 現在のユーザー名 |
| \v | bash のバージョン |
| \V | bash のバージョン・リリース番号など詳細 |
| \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 Blue | 1;34 |
| Light Green | 1;32 |
| Light Cyan | 1;36 |
| Light Red | 1;31 |
| Light Purple | 1;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より)。