Cシェル(csh)とは、C言語によく似た文法を採用したUNIX系OSのシェルのことです。1978年ごろにカリフォルニア大学バークレー校のビル・ジョイ氏が開発し、BSDに標準搭載されて広まりました。名前の「C」は、当時のUNIX開発者が慣れ親しんだC言語に文法を寄せたことに由来します。
現実世界でいえば、ふだん話している言葉と同じ方言で対応してくれる窓口のようなものです。C言語でプログラムを書く技術者にとって、シェルの文法まで同じ感覚で書けることは大きな利点でした。加えてCシェルは、当時のシェルになかった便利な対話機能をいち早く取り入れた点でも画期的でした。
Cシェルが持ち込んだ機能
Cシェルは、原型であるBシェル(sh)にはなかった「使い勝手」の機能を先駆けて実装しました。現在のシェルでは当たり前になっている次の機能は、いずれもCシェル由来です。
- ヒストリー機能:過去に実行したコマンドを呼び出して再実行できます。「!!」で直前のコマンドを繰り返す書き方が有名です。
- エイリアス:長いコマンドに短い別名を付けて登録できます。
- ジョブコントロール:実行中の処理を一時停止し、背後で動かしたり呼び戻したりできます。
- ディレクトリスタック:作業フォルダを積み重ねて記録し、素早く行き来できます。
これらは後にbashなどのBシェル系にも取り込まれ、シェル全体の標準機能となりました。Cシェルの功績は、対話操作の快適さという発想をシェルに持ち込んだことにあります。
Bシェルとの文法の違い
同じ処理でも、CシェルとBシェルでは書き方が大きく異なります。
| 項目 | Cシェル(csh) | Bシェル(sh/bash) |
|---|---|---|
| 変数の代入 | set name = value | name=value |
| 条件分岐の終わり | if 〜 endif | if 〜 fi |
| 環境変数の設定 | setenv NAME value | export NAME=value |
| 設定ファイル | .cshrc/.login | .bashrc/.profile |
両者に互換性はないため、Cシェル用に書いたスクリプトはBシェルでは動きません。スクリプトを読む際は、まず1行目の指定(#!/bin/cshか#!/bin/shか)で系統を確認するのが基本です。
tcshと現在の位置づけ
Cシェルを拡張したものがtcshで、コマンド名やファイル名の補完、履歴の編集機能などが加えられています。現在「csh」として起動されるものの実体がtcshになっている環境も多くあります。
| 長所 | C言語に近い文法で書ける/対話操作の機能が充実/FreeBSDなどで長く標準採用されてきた |
| 短所 | 複雑なスクリプトの記述に向かない/エラー処理やリダイレクトの扱いに癖がある/Bシェル系と互換性がない |
スクリプト記述の弱点は古くから指摘されており、現在では自動化スクリプトはbashやzshなどのBシェル系で書くのが一般的です。それでも、FreeBSDの管理者アカウントの既定シェルとして使われるなど、Cシェルは今も現役です。歴史的にも、現代のシェルが備える便利機能の出発点として重要な位置を占めています。

コメント