bashのプロンプト 

bashのプロンプトに使用できる変数一覧

\a  ASCIIビープ
\A  時刻(HH:MM)
\d  日付(曜日、月、日)
\D{format}  strftime(3)の出力
\e  ASCIIエスケープ記号
\H  ホスト名
\h  最初の'.'までのホスト名
\n  改行
\s  シェル名
\T  時刻(HH:MM:SS)12時間表記
\t  時刻(HH:MM:SS)24時間表記
\@  時刻(午前/午後付表記)
\u  ユーザ名
\v  bashバージョン
\V  bashリリースバージョン番号
\w  カレントディレクトリ
\W  カレントディレクトリのベース名(ってなに?)
\#  コマンド番号
\!  コマンドの履歴番号
\$  実行UIDが0なら'#'、それ以外は'$'
\nnn  文字(8進指定)
\\  '\'
\[  端末制御シーケンスなど非印字記号シーケンス開始
\]  同上終了


I/Oスケジューラについて(その2) 

I/Oスケジューラについて情報を頂いたので、手元のFedoraCore5マシンについて調査。deadlineスケジューラを使用するよう設定してあるマシンで調べたところ、

$ find /sys/block/ -name queue -print -exec cat {}/scheduler \;
/sys/block/fd0/queue
noop anticipatory [deadline] cfq
/sys/block/hdd/queue
noop anticipatory [deadline] cfq
/sys/block/hdc/queue
noop anticipatory [deadline] cfq
/sys/block/hda/queue
noop anticipatory [deadline] cfq
$

ということになった。このファイル構成を見るとデバイスごとにスケジューラを変更できるように見える。実際のところどうなんだろう。
ま、それはそれとして再起動なしでスケジューラを変更できそうだ。
bdflushのパラメータをいじるのは一般的にやることの多いチューニングだと思う。ただ、DBサーバなどのメモリ利用状況の特殊なマシン以外では、デフォルト設定で十分最適だったりしてあまり改善できなかったりするように感じる。デスクトップマシンとかはbdflushでは改善しにくいんじゃないかしら。

あくまで思い込み+フィーリングだけど。

bashあれこれ 

bashのviモード
「入門 bash」を読んでいたらbashのviモードというものがあることを知らされた。これはbashのインタラクティブ機能?のキーアサインをemacsライクとするかviライクとするか選択できるというものであり、デフォルトはemacsライクである。
bashも長いこと使っているのでとりたてて困ることはないのだが、emacs/xemacsを使わないでviを使う人であるためviモードの方が何かと便利だろう。
bashを起動した後にemacs/viモードを切り換える。

set -o {emacs|vi}

viの起動時のモードを指定する。
readlineの設定ファイル~/.inputrcにて次のような記述を行う。環境変数INPUTRCにファイルパスを記述することでreladlineの設定ファイルを変更できる。
[~/.inputrc]

set editing-mode {emacs|vi}

FedoraCore5ではシェル変数?環境変数?INPUTRCとして/etc/inputrcが設定されているが、最後に存在する場合には~/.inputrcを読みに来てくれているのか~/.inputrcに上記を書くだけで反映された。
readlineの設定はreadlineライブラリを利用するプログラム共通で適用されるはず。

bashのキーバインドも近い話題なのでここにメモしておく。

bind -p

これで現在のキーバインド一覧が出力される。
コマンドsourceとコマンド.は同じ動作をするとのこと。'.'がコマンドとな。コマンド'.'が/etc/init.d/などで使われているのは知っていたのだが、その意味はこれまで分からないでいた。コマンド'.'の存在はどうかと思うが...。
aliasを使用した際には引数にはalias展開が行われない。しかしaliasの値が空白で終わっている場合には次のワードに対してalias展開を試みてくれる。

alias foo='bar '

とすれば、コマンドライン

foo baz

のbazについてもalias展開を行うというわけだ。なんだか嬉しい気もするが、どんな時に役立つのか想像できない。どんな時だ?

特殊な変数表記

${variable:-word}
  $variableが存在し、かつnullではない場合にその値を返す。それ以外の場合にはwordを返す。
${variable:=word}
  $variableが存在し、かつnullではない場合にその値を返す。それ以外の場合は$variablewordを設定して返す。$1などといった特殊変数は設定できない。
${variable:?message}
  $variableが存在し、かつnullではない場合にその値を返す。それ以外の場合は変数名とmessageを出力してスクリプトを終了する。
${variable:+word}
  $variableが存在し、かつnullではない場合にwordを返す。それ以外の場合はnullを返す。
${variable:offset:length}
  部分文字列を展開する。$variableの値からoffsetの位置からlength文字長さの部分文字列を取り出す。1文字目のoffsetは0。負のoffsetが指定された際には文字列末尾からの位置指定として扱う。対象変数が$@の場合にはoffset及びlengthは位置パラメータとして扱われる。