KornShell(ksh)は、
1980年代初期に
ベル研究所のデビッド・コーンによって開発された
Unixシェルの一種です。1983年の
USENIX年次大会で発表され、初期の開発にはマイク・ヴィーチとパット・サリヴァンも携わりました。彼らはそれぞれ、
Emacsスタイルとviスタイルの入力行編集モードのコードを実装しました。
設計思想
KornShellは、
Bourne Shellに対して完全な上位互換性を持ち、C Shellの便利な機能も多数取り入れています。具体的には、コマンド履歴やジョブコントロール、コマンドエイリアスなどが挙げられます。開発者のコーンは、
ベル研究所内のユーザーからの要望を受けてkshを開発したとされています。
POSIX.2 Shell and Utilities, Command Interpreter (IEEE Std 1003.2-1992) に準拠しており、標準的なシェルとして利用できます。
主な特徴
- - Bourne Shellとの互換性: 既存のBourne Shellスクリプトをそのまま利用できます。
- - C Shell由来の機能: コマンド履歴、ジョブコントロール、コマンドエイリアスなど、対話的な操作を快適にする機能が追加されています。
- - WYSIWYG編集: 対話モードでは、コマンドラインをWYSIWYG(What You See Is What You Get)のように編集できます。カーソルキーで過去のコマンドを呼び出し、vi、emacs、XEmacs互換のキー操作で編集できます。
- - ksh93の拡張機能: ksh93では、連想配列や浮動小数点数演算機能が組み込まれ、より高度な処理が可能になりました。
歴史
KornShellは、2000年までAT&Tの
プロプライエタリソフトウェアでしたが、その後、AT&T独自の
ライセンスを経て、2005年の 93q からは
Common Public License で配布されるようになりました。現在では、AT&T Software Technology (AST) Open Source Software Collectionの一部として入手できます。
当初は商用
ライセンスのみで提供されていたため、代替となるオープンソース実装が複数開発されました。pdksh、mksh、bash、zshなどがその代表例です。最初のKornShellであるksh88は、
POSIX.2 Shell and Utilitiesのベースとなっています。
現在でも、一部のベンダーは古いksh88を/bin/kshとして利用しており、独自の拡張を行っている場合もあります。ksh93は開発者であるコーン自身がメンテナンスを続けており、ksh93u+が最新版です。バグ修正版は、バージョン番号を変更せずにリリースされることもあります。
dtksh(デスクトップ用KornShell)は、CDE(
Common Desktop Environment)の一部として配布されたksh93です。Motifウィジェットのシェルレベルでのマッピングを提供し、
Tcl/Tkとの競合を意識していました。
派生ソフトウェア
KornShellからは、以下のような派生ソフトウェアが生まれています。
- - dtksh: CDEの一部として配布されたksh93のフォーク。
- - tksh: Tkウィジェット・ツールキットへのアクセスを提供するksh93のフォーク。
- - oksh: OpenBSD版KornShellのフォーク。GNU/Linux|GNU_Linuxで動作し、DeLi Linuxでデフォルトシェルとして採用されています。
- - mksh: MirOS BSDで開発されているKornShellの自由ソフトウェア実装。
- - SKsh: AmigaOS版KornShell。ARexxとの相互作用などAmiga固有の機能を提供します。
- - MKS Korn shell: MKS社による商用実装。Microsoft Windows Services for UNIX (SFU) のバージョン2.0までで採用されていましたが、完全な互換性はありませんでした。SFU 3.0以降では、Interixの一部としてPOSIX.2準拠のシェルが導入されています。
- - UWIN: デビッド・コーンが開発したWindows上のUNIX互換パッケージで、KornShellも含まれています。
まとめ
KornShellは、
Bourne ShellとC Shellの利点を併せ持ち、
POSIX標準に準拠した強力なシェルです。オープンソース化によって幅広い環境で利用可能になり、多くの派生ソフトウェアが開発されました。現在も活発にメンテナンスされており、
UNIX系OSのシェル環境において重要な役割を果たしています。