本資料は、bashのプロンプトに各種情報を表示する設定方法を以下に記します。
bashのプロンプトには、様々な情報を表示させることができます。
ホスト名や現在の作業ディレクトリを表示することは一般的な設定でしょう。
他にも様々な情報を表示させることが可能です。
以下はbashのプロンプトで使える特殊機能を持つ文字列です。
\d | 日付表示(曜日, 月 , 日) |
\D{format} | 時間表示。システムコール strfttime(3)のフォーマット文字列で指定 |
\h | ホスト名(ドメインパートを含まない) |
\H | ホスト名 |
\j | バックグラウンドで起動しているジョブの数 |
\l | 仮想端末の番号(pts/0, pts/1などの数字) |
\n | 改行(LF) |
\r | 改行(CR) |
\s | シェル名(bash) |
\t | 時刻表示(24時間表示 HH:MM:SS) |
\T | 時刻表示(12時間表示 HH:MM:SS) |
\@ | 時刻表示(12時間表示 HH:MM AM/PM) |
\A | 時刻表示(24時間表示 HH:MM) |
\u | ユーザ名 |
\v | bashのバージョン |
\V | bashのバージョン(パッチレベル含む) |
\w | 現在の作業ディレクトリ(フルパス表示) |
\W | 現在の作業ディレクトリ(現在のディレクトリ名のみ表示) |
\! | history上の番号 |
\# | bashが起動してからのコマンド番号 |
\$ | rootの場合には、# となり、それ以外のユーザでは $ となる |
\nnn | 8進数での文字指定(nは数字) |
\\ | \そのもの |
\[ | ターミナル操作用のシーケンス文字列の開始 |
\] | ターミナル操作用のシーケンス文字列の終了 |
これらの特殊な文字列を、シェル変数のPS1に設定することで、プロンプトの表示を変えることができます。
例えば以下のように設定すると、
PS1="(\u@\H:\w \D{%FT%T})\n\\\$ "
プロンプトは以下のようになります。
(ユーザ名・ホスト名・現在のディレクトリ・現在時刻・改行・root時 #、一般ユーザ時 $ のプロンプト文字)
(root@ubuntu:~ 2013-08-15T00:18:33) #
プロンプトはシェル変数や環境変数、コマンドの実行結果も表示することができます。
以下はwコマンドの同時ログインユーザ数をプロンプトに表示しています。
PS1="Now $(w | head -1 | awk '{print $6}') users login \$ "
プロンプトは以下のようになります。
Now 2 users login #
プロンプトは端末上で常に表示されているものなので、この機能は状況によっては非常に役に立つものとなります。
例えば、プロンプトに以下のような情報を含めておけば、端末の出力をログとして保存して、
作業の証跡としてのログを振り返って確認するときには非常に有用となります。
上述のプロンプトでは現在の時刻が表示されています。
(リアルタイムに時刻表示がカウントアップするわけではないので、
プロンプトが表示された(先に実行したコマンドが完了した)瞬間の時刻ですが)
\D{%FT%T}が現在の日付と時刻を表示している部分です。この文字列指定で、
2013-08-15T00:18:52
のような時刻の表示フォーマット(ISO8601形式)としています。
これによって、作業履歴としてどの時間に何のコマンドを実行していたかというのを確実に把握することができます。
自分が今何の作業をしているのか、もちろん自分が知っています。
しかし、証跡としてのログを振り返って確認するときにはそうとは限りません。
あるいは複数の作業を並列して実行しているときに、
どの端末でどの作業をしていたか混乱することもありえます。
常に表示されているプロンプトに、その端末で実施している作業内容が表示されていたら、
ケアレスミスの防止や未来での作業内容の確認時に非常に有益でしょう。
プロンプトの設定はシェル変数PS1を変更するだけです。
しかし「現在の作業内容メモ」=「任意の文字列」を簡便に変更可能とする機能を、bashの関数として実装しました。
function caption() { if [ x"$*" = x ]; then CAPTION="" else CAPTION=" $*" fi PS1="(\u@\H:\w \D{%FT%T}${CAPTION})\n\\\$ " }
これを.bashrcに追加すると通常のコマンドと同様に利用できます。
# (root@ubuntu:~ 2013-08-15T00:18:33) #
# caption TEST01 START (root@ubuntu:~ 2013-08-15T00:18:43 TEST01 START) #
# ps PID TTY TIME CMD 24062 pts/0 00:00:00 sudo 24063 pts/0 00:00:00 bash 24125 pts/0 00:00:00 ps (root@ubuntu:~ 2013-08-15T00:18:52 TEST01 START) #
# caption TEST01 END (root@ubuntu:~ 2013-08-15T00:18:57 TEST01 END) #
# caption TEST02 1ST TRY (root@ubuntu:~ 2013-08-15T00:19:08 TEST02 1ST TRY) # ping -c 1 localhost PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.053 ms --- localhost ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms (root@ubuntu:~ 2013-08-15T00:19:41 TEST02 1ST TRY) #
# caption TEST02 END (root@ubuntu:~ 2013-08-15T00:19:53 TEST02 END) #
# caption (root@ubuntu:~ 2013-08-15T00:19:57) #
プロンプト文字列を設定するのは小技ですが、利用の仕方によっては、ミスの回避や過去の作業履歴を確認する際にかなり有用となります。
以上、bashのプロンプトに現在の時刻や、作業内容のメモを表示させる方法についてでした。