シェルといえばbashですよね。笑

shebangはしっかり指定しましょうとか各所で言わていますが、今まではサボって適当に !/bin/sh とか指定していました。
きょうは時間ができたので、有名ドコロのシェルが何からどう派生してきたのか一念発起して調べてみました。

参考文献はWikipediaです(キリッ

僕と同じく sh を適当に設定している人は多いと思いますが、たんなる sh は今では他のシェルへのエイリアスなので、その先が何なのかを確認しなければなりません。bashは sh をさらに高機能にしたもので、もっとも普及しています。大抵のLinuxディストリビューションや、Mac OSのターミナルで標準に指定されているシェルです。

dashは、ubuntuを含むdebian系Linuxディストリビューションで標準に指定されているシェルです。親のashは、多くのBSD系で標準のシェルです。また、kshを親に持つzshもあります。kshやzshはそれほど標準のシェルに採用されているわけではありませんが、zshはbashのように振る舞う互換モードを備えていて、その便利さからファンも多いです。

bashとdashとzshはそれぞれ祖先に sh をもっており、 sh の機能については互換性があります。これに対して、祖先が sh でないものもあり、その一つがcshです。cshはC言語風に書けるシェルで、いまではcshから派生したtcshが多く利用されます。cshはshと同じthompson shellを親に持っており、そのためcshとshとは互換性がありません。

そんなややこしい関係性があるシェルの世界ですが、この図さえあればもうshebangに困りませんね。ご査収ください。

参考:Wikipedia シェル, Bourne Shell, bash など