bash を使う理由2008年11月07日 20時08分10秒

Linux が流行りだした頃は、bash を使っている人は Linux 使いかと言われたものだ。bash が、Linux のデフォルトのシェルであり、/bin/sh であった為だ。それに引き替え、csh 系の人達は、BSD 系か Sun 系かと言われたものだ。

最初の頃は、csh だろうが、tcsh だろうが、bash だろうがあまり関係無かった。tcsh や bash などの履歴が残り、編集できるものの方が好きではあったが。

次第に、コマンドラインからのループや条件式を多用するようになり始め、それ以来 bash に落ち着いている。sh と同じ文法でスクリプトが書けるのが、ksh や zsh などの他のシェルではない理由の一つ。また、コマンドの編集がしやすいのが、sh ではない理由。csh や tcsh は一行で、ループや条件が書けないので、それが目的の時は使わなくなった。

例えば、巨大なログファイル output.{1,2,3,4} があるとしよう。そこには、時刻があるのでそれを削除して比較したい。違う部分を見付けて、徐々にプログラムの設定をすりよせるのが目的だ。そこで、これらの四つのファイルを相互に比較して何が違うのかを見極めたい。


bash $ for i in 1 2 3 4 ;
do sed 's/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]//' output.${i} > /tmp/$i &
done;
wait;
for i in 1 2 3 4; do for j in 1 2 3 4; do
if [ $i -lt $j ]; then cmp /tmp/$i /tmp/$j; fi;
done; done

最初に、sed をバックグランドで一気に起動して、全ての処理が終るのを wait で待つ。終ったら、これらの四つのファイルを比較する。繰り返すし、次第にコマンドも変えていきたいので、上の矢印で前のコマンドに戻り編集できるのが便利だ。

この程度だと、ファイルにわざわざ書く必要が無いので楽だ。ファイルだと消すのが勿体無くなって、使い回せないのにたまっていく。履歴編集のコマンドもある程度使えるが、コマンドが長いし、同じ文字列も頻繁に出たり、スペースなども問題になってきて、履歴の置換による編集は辛い。