UNIX 系 OS を使用する上で避けては通れず、 そして最強のインターフェースである(と思う)シェルのお話。 私が使っている tcsh のちょっと便利な使い方については こちら。参考書籍
- 『プロフェショナル シェルプログラミング』(アスキー出版局)
- 『Bash 入門』(アスキー出版局)
各種シェルを比較してみました。 構文の違いで大きく分けると、 sh, ksh, bash, zsh は Bourne シェル系、 csh, tcsh は C シェル系です (zsh は C シェル系の構文もサポートしています)。 これら以外にも多くのシェルやシェルもどきがあります。
- sh - Bourne シェル, POSIX シェル
sh は標準のシェルであり、 POSIX(IEEE Std1003.2) で標準化されていますが、 全てのシステムの sh で完全に POSIX 対応しているわけではありません。 対話機能が貧弱なため、ログインシェルとして使用されることは少なく 主にスクリプトとして使用されています (システムがハングした後の再起動時に fsck が失敗したりすると /bin/sh で作業する必要があったりもしますが)。 FreeBSD などでは ash と呼ばれる機能強化したものが使用されています。 ksh や bash が /bin/sh として使われているシステムもあります。- ksh - Korn シェル
Bourne シェルを元に機能拡張したシェル。 ヒストリ機能やコマンドライン編集機能が追加されています。 SystemV 系では標準であり商用ですが、 パブリックドメインの pdksh もあります。- bash - Bourne Again SHell
Bourne シェルを元に機能拡張したシェル。 コマンドラインでの編集機能が充実しており、 ksh とはよく似ています。 GNU のソフトとして配布されており、 特に Linux で標準シェルとして採用されていることで広まっています。- zsh - Z シェル
最強をうたったシェル。 Bourne シェル系の構文が基本ですが、 C シェル系の構文もサポートしています。 ksh, bash のほとんどの機能に加えて プログラマブル補完機能や独自のファイル名展開機能を持っています。- csh - C シェル
BSD UNIX で採用されたシェル。 C 言語風の構文を持ち、 初めてヒストリ機能やエイリアス機能が導入されたシェルですが、 スクリプト言語としては Bourne シェル系より劣っています。 デフォルトのログインシェルとして設定されているシステムも 多いものの現在では使用されなくなりつつあります。- tcsh - TENEX C シュル
C シェルを元に機能拡張したシェル。 コマンドラインでの編集機能と 強力な プログラマブル補完機能 を持っています。 エラーメッセージの 日本語カタログ が楽しい。
FreeBSD 2.2.8R での機能比較表です。
sh ksh(pkdsh) bash bash 2.0 zsh csh tcsh バージョン (OS付属) 5.2.13 1.14.7 2.02.1 3.0.5 (OS付属) 6.08.03 エイリアス ○ ○ ○ ○ ○ ○1) ○1) 関数 ○ ○ ○ ○ ○ ×1) ×1) 構造化スクリプト ○ ○ ○ ○ ○ △ △ 配列 × ○ × ○ ○ ○ ○ キーバインド × ○ ○ ○ ○ × ○ ヒストリ編集 × ○ ○ ○ ○ × ○ ライン編集 × ○ ○ ○ ○ × ○ 補完 × △ ○ ○ ◎2,3) △ ◎2,4) ファイル名展開 △ ○ ○ ○ ◎5) ○ ○6) プロンプトカスタマイズ × × ○ ○ ○ × ○ NLSカタログ(日本語化) ×7) ×7) × × × ×7) ◎
1) csh, tcsh は関数が無いかわりエイリアスが引数をとれる
2) zsh, tcsh は強力なプログラマブル補完機能がある
3) zsh はメニュー補完機能がある
4) tcsh は補完候補の一覧が GNU-ls のようにカラー化できる
5) zsh は階層化したディレクトリに一致する `**' などある
6) tcsh は「それ以外」に一致する `^' がある
7) 商用 UNIX では対応しているものもある
比較表を見ると bash, zsh, tcsh から選ぶのが順当でしょう。 私の場合、学生の時 csh → tcsh と他の選択枝を知らずに移ったため tcsh を使い続けている面もあるのですが、bash や zsh を知ってからも 一応比較してみました。 その結果、まずプログラマブル補完機能 がないことで bash は選択対象から外しました(bash がサポートしたらまた考えよう)。 後は zsh か tcsh かなのですが、 tcsh が日本語(複バイト文字)をサポートしていること (参考 znc HomePage )、 参考書籍があること(zsh の専門書籍はみたことないですね)、 補完候補をカラー表示できることでやはり tcsh にしました。 スクリプト機能が貧弱なのは、sh (または perl とか)でスクリプトを 書けばいいことですし。