Bourne shell backward compatible Unix shell created by David Korn
KornShell ( ksh )は、 1980年代初頭に ベル研究所 の David Korn によって開発され、 1983年7月14日の USENIXで発表された Unixシェルです 。[1] [2] 初期の開発は Bourneシェルの ソースコードに基づいていました。 [7] 他の初期の貢献者には、ベル研究所の開発者であるMike VeachとPat Sullivanがおり、それぞれ Emacs と vi スタイルの行編集モードのコードを記述しました。 [8] KornShellはBourneシェルと下位互換性があり、ベル研究所のユーザーの要望に応えて Cシェル の多くの機能を備えています 。
特徴
KornShell は、 POSIX.2 、シェルおよびユーティリティ、コマンド インタープリタ (IEEE Std 1003.2-1992) に準拠しています。KornShell と従来の Bourne シェルの主な違いは次のとおりです。
ジョブ制御 、 コマンドエイリアス 、 コマンド履歴は Cシェルの 対応する 機能を模倣して設計された。ジョブ制御は1989年にBourne Shellに追加された [9]
vi 、 Emacs 、 Gosling Emacs に基づいた 3 つのコマンドライン編集スタイルを選択
連想配列 と組み込みの 浮動小数点演算(KornShell の ksh93 バージョンでのみ使用可能 )
関数の動的検索
数学関数
プロセス置換とプロセスリダイレクト
C言語のような表現
強化された式指向の for ループ と while ループ
(動的にロードされる)組み込みコマンドの動的な拡張性( ksh93 以降)
参照変数
階層的にネストされた変数
変数にはメンバー関数を関連付けることができます
オブジェクト指向プログラミング( ksh93t 以降)
変数は、メンバー(サブ)変数とメンバーメソッドを持つオブジェクトになることができます。
オブジェクトメソッドは、オブジェクト変数名に続いて(ドット文字の後に)メソッド名を付けて呼び出されます。
特別なオブジェクトメソッドは、オブジェクトの初期化または割り当て、オブジェクトの放棄( unset )で呼び出されます。
継承形式だけでなく、合成と集約も可能
歴史
Windows Services for UNIX 上で動作する Korn Shell
KornShellは元々 プロプライエタリソフトウェア でした。2000年にソースコードはAT&T独自のライセンスの下で公開されましたが、 2005年初頭の ksh93qリリース以降は Eclipse Public License の下でライセンスされています 。 [4] KornShellはAT&T Software Technology (AST)オープンソースソフトウェアコレクションの一部として利用可能です。KornShellは当初AT&Tのプロプライエタリライセンスの下でのみ利用可能であったため、いくつかの無料オープンソースの代替ソフトウェアが開発されました。これらには pdksh 、 mksh 、 Bash 、 Z shellなど があります。
オリジナルの KornShell であるksh88 の機能は、標準 POSIX.2 、シェルおよびユーティリティ、コマンド インタープリタ (IEEE Std 1003.2-1992)
のベースとして使用されました。
一部のベンダーは、古い ksh88 バリアントの独自バージョンを 、拡張機能付きで出荷し続けています。ksh93は GitHub で管理されています 。 [10]
ksh93は 「デスクトップKornShell」( dtksh )として、 Common Desktop Environment の一部として配布されています 。 [11]このバージョンは、 Motif ウィジェット用のシェルレベルのマッピングも提供しています。これは Tcl / Tk の競合として意図されていました 。 [12]
オリジナルのKornShellである ksh88は 、バージョン4で AIX のデフォルトシェルとなり、 [13] [14] ksh93は別途利用可能になりました。 [15]
UnixWare 7には ksh88 と ksh93の 両方が含まれています 。デフォルトのKornシェルは ksh93 で、 /usr/bin/ksh として提供されています。古いバージョンは /usr/bin/ksh88 として提供されています。 [16] UnixWareには、 CDE がインストールされている場合、 dtksh も含まれています。
ksh93ディストリビューションは 、 2012年頃に作者が安定バージョン ksh93u+ でAT&Tを去った後、不安定な運命を辿りました 。主要な作者は、 2014年頃まで ksh93v-ベータブランチで作業を続けました。その作業は最終的に2017年に Red Hat によって主に引き継がれ(顧客の要望により)、2019年秋に ksh2020 [17] の最初のリリースとなりました。 この最初のリリースでは(以前の安定性の問題がいくつか修正されていましたが)、破損と互換性の問題が発生しました [18] 。 2020年3月、AT&Tはコミュニティの変更をロールバックしてブランチに保存し、 ksh93u+ から再起動することを決定しました。変更が広範すぎてkshに重点が置かれていたため、メンテナンスモードのプロジェクトに吸収するには不十分だったためです。 [19] [20] ksh2020 [21]は、 EBCDIC サポートの削除、 ksh93u+ 用に書かれたバイナリプラグインのサポート終了、一部の壊れた数学関数の削除など、 「いくつかの理由」 [22] により「メジャーリリース」としてリリースされましたが、AT&Tによるメンテナンスやサポートは一度も行われていません(最初のリリース日でさえも)。ksh2020 の ソースコードは2020年2月以降コミットされておらず、2021年10月に読み取り専用でアーカイブされました。 [17]
ksh2020 ブランチの問題とその放棄を受けて、2020年5月に AT&Tの最後の安定したリリース( ksh93u+ 2012-08-01)に基づいて ksh93u+m ブランチの新しいリポジトリが作成され、 バグ修正の開発が積極的に続けられています。 [23]
メインソフトウェアブランチへの主な貢献
以下のリストでは、KSH のメイン ソフトウェア ブランチは、1983 年 7 月から2019 年後半の KSH2020 のリリースまでのオリジナル プログラムとして定義されます。KSH の後継バージョン (ブランチ) の継続的な開発は、2020 年以降、さまざまなグループに分割されており、以下では詳しく説明しません。
主な個人貢献者
以下は、貢献度の高い順に並べたものです。
デビッド・G・コーン (AT&Tベル研究所、AT&T研究所、Google、そして創設者)
グレン・S・ファウラー(AT&Tベル研究所、AT&T研究所)
Kiem-Phong Vo (AT&T ベル研究所、AT&T 研究所)
アダム・エドガー(AT&Tベル研究所)
マイケル・T・ヴィーチ(AT&Tベル研究所)
パトリック・D・サリバン(AT&Tベル研究所)
Matthijs N. Melchior (AT&T Network Systems International)
Karsten-Fleischer (オムニアム ソフトウェア エンジニアリング)
ボイヤー・ムーア
シテシュワール・ヴァシシュト(レッドハット)
カーティス・レーダー
統合コンサルタント
主な企業寄付者
以下は、貢献度の高い順に並べたものです。
寄付された企業リソース
上記の主要な貢献企業に加え、KSHの開発に無償のリソースを提供してくださった企業もいくつかあります。以下にリストします(アルファベット順)。
変種
KornShell には
いくつかの フォーク と クローン があります。
dtksh – CDE の一部として含まれる ksh93 のフォーク 。
tksh – Tk ウィジェット ツールキット へのアクセスを提供する ksh93 のフォーク 。
oksh – OpenBSD 版KornShellの派生版 の移植版。オペレーティングシステム間で最大限の移植性 [24] を実現することを目的としている。DeLi Linux 7.2ではデフォルトのシェルとして使用された。
loksh – OpenBSD のKornShellの変種を最小限の変更で Linux に移植したもの。 [25]
mksh – OpenBSDの pdksh からフォークされたKornShell言語の フリー実装。元々は MirOS BSD 用に開発され、 MirOSライセンス(パブリックドメインではないものの、 寛容な ライセンス) に基づいてライセンスされている 。 [6] BSDでの使用に加え、この亜種は Debianで pdkshに取って代わり、 [26] Androidのデフォルトシェルとなっている。 [27]
SKsh – ARexxとの 相互運用性など、Amiga固有の機能をいくつか提供する AmigaOSの 亜種。 [28] この伝統に従い、 MorphOSは SDKで pdkshを 使用しています。
MKS社のMKS Kornシェルは、 Microsoft Windows Services for UNIX (SFU)バージョン2.0までの KornShell言語の独自実装です。David Kornによると、MKS Kornシェルは1998年のKornShellと完全に互換性がありませんでした。 [29] [30] SFUバージョン3.0では、 MicrosoftはMKS Kornシェルを Interix の一部として新しいPOSIX.2準拠のシェルに置き換えました 。 [31]
KornShellは 、David KornによるUnix互換パッケージである UWINに含まれています。 [32]
Doug Gwyn(米陸軍BRL)のSystem V on BSDパッケージの /bin/shには、Ron NatalieによるSVR2版の /bin/shが 含まれていました。このバージョンはジョブ制御とコマンドライン編集の両方を備えていました。これは、AT&Tではまだkshが使われていなかった当時の オリジナルの ksh と同時代のものでした。その後、 CMU Mach由来のすべてのシステムに同梱される /bin/shは、この/bin/shになりました。 [33]
参照
参考文献
^ ab Ron Gomes (1983年6月9日). 「Toronto USENIX Conference Schedule (tentative)」. ニュースグループ : net.usenix . 2010年 12月29日 閲覧 。
^ ab Guy Harris (1983年10月10日). 「cshに関する質問」. ニュースグループ : net.flame . 2010年 12月29日 閲覧 。
^ 「Windows Subsystem for Linux用のKorn Shellランチャー « Musings」 。blog.fpmurphy.com 。 2021年1月29日 閲覧 。
^ ab "ast-open package". AT&T Research. nd 2015年10月1日時点のオリジナルよりアーカイブ。 2022年 12月19日 閲覧 。
^ “LEGAL”. 2012年2月6日時点のオリジナルよりアーカイブ 。 2010年6月10日 閲覧。
^ ab "MirBSD Korn Shell". Mirbsd.org . 2018年 12月10日 閲覧 。
^ Korn, David G. (1994 年 10 月 26 日)、「ksh - An Extensible High Level Language」、 Proceedings of the USENIX 1994 Very High Level Languages Symposium 、USENIX Association 、 2015 年 2 月 5 日 取得、 新しいスクリプト言語を発明する代わりに、Bourne シェルを修正し、必要に応じて組み込みコマンドを追加することで、フォーム入力システムを構築しました。
^ Bolsky, Morris I.; Korn, David G. (1989). 「謝辞」. KornShellコマンドとプログラミング言語. エングルウッド・クリフス, ニュージャージー: Prentice Hall. pp. xii. ISBN 0-13-516972-0 。
^ 「伝統的なBourneシェルファミリー / 歴史と発展」 In-ulm.de . 2018年 12月10日 閲覧 。
^ 「これはAT&TリサーチによるAT&TソフトウェアテクノロジーASTソフトウェアのダウンロードサイトです。AT&T ASTオープンソースソフトウェアコレクションは、概要と実用的な再利用可能なUNIXソフトウェアを提供します。」 Github.com 2018年12月10日 2018年 12月10日 閲覧 。
^ ビル・ローゼンブラット、アーノルド・ロビンズ (2002). 『Korn Shell を学ぶ』(第2版)O'Reilly. pp. viii– ix. ISBN 978-0-596-00195-7 。
^ Pendergrast, J. Stephen (1995). デスクトップKornShellグラフィカルプログラミング. Addison-Wesley. p. 359. ISBN 978-0-201-63375-7 。
^ ケイシー・キャノン、スコット・トレント、キャロリン・ジョーンズ (1999). Simply AIX 4.3 . プレンティス・ホール. p. 21. ISBN 978-0-13-021344-0 。
^ 「IBM Knowledge Center」. IBM . 2018年 12月10日 閲覧 。
^ 「IBM Knowledge Center」. IBM . 2018年 12月10日 閲覧 。
^ 「UNIX95準拠」 Uw714doc.sco.com . 2018年 12月10日 閲覧 。
^ ab “ksh2020”. GitHub . 2021年2月26日.
^ “ksh2020 changelog”. GitHub . 2020年5月29日.
^ 「このリポジトリを巻き戻してコミュニティを奨励する · Issue #1466 · att/ast」 。GitHub 。
^ "拡張グロブによるセグメント違反 · #1464 · att/ast". GitHub .
^ 「2020.0.0: ksh-2020.0.0の安定版リリース」 GitHub 。 2021年1月29日 閲覧 。 注:ksh2020はメンテナンスもサポートもされていません。
^ “ksh 2020.0.0 CHANGELOG”. GitHub . 2021年1月29日.
^ “ksh 93u+m”. GitHub . 2021年11月17日.
^ “oksh at GitHub”. GitHub . 2020年8月1日.
^ “loksh at GitHub”. GitHub . 2021年10月15日.
^ “5.11. PDKSHからMKSHへの移行”. 2014年7月28日時点のオリジナルよりアーカイブ 。 2014年7月28日 閲覧。
^ 「Androidのシェルとユーティリティ」. android.googlesource.com . 2025年6月27日 閲覧。
^ 「Aminet - util/Shell/SKsh21.LZH」。
^ 「David Korn Tells All」、Slashdot、2001年2月7日。 2009年10月22日 閲覧 。
^ 「Jerry Feldman — USENIX NT/LISA NTカンファレンス出席者」Lists.blu.org、1998年8月29日。 2009年10月22日 閲覧 。
^ 「Windows Services for UNIX バージョン 3.0」。Technet.microsoft.com、2007年12月5日。 2009年10月22日 閲覧 。
^ アナトール・オルザック (2001). Kornシェル:UnixおよびLinuxプログラミングマニュアル. Addison-Wesley Professional. p. 4. ISBN 978-0-201-67523-8 。
^ Natalie, Ron (2023-01-30). 「ジョブ制御とその他の端末の楽しみ」. TUHS ("The Unix Heritage Society") メーリングリストから。2024-07-07 オリジナルからのアーカイブ。2024-07-07 閲覧 。 … Berkeley のジョブ制御は興味深いハックでした。BRL の私たちにとって問題は、私が C シェルの構文をひどく嫌っていたことでした。Korn シェルはまだ AT&T から抜け出していなかったので、C シェル(あまりドキュメント化されていませんでした)でそれが実際にどのように動作するのかを、主に調査によって理解するのに時間を費やし、その後 Bourne シェル(当時は System V のソースコード版を使用していました)で再実装しました。しかし、BRL では Bourne シェルの使用にまだ賛同が得られませんでした。なぜなら、その頃には tcsh がコマンドライン編集機能を搭載していたからです。そこで、シェルのソースコードに戻りました。この頃には5R2がリリースされていたので、 シェル のソースコードを入手しました 。[...] emacs風のコマンドライン編集機能をシェルに組み直しました。その後、USENIXのDavid Kornと楽しい会話をしました。彼らは当時おそらくBourne Shellのジョブ制御内部に最も精通していた二人だったでしょう。また、bashかpdksh(どちらか覚えていません)を書いている人たちにも会い、その仕組みをすべて説明しました。[ ... ] 数年後、私はBRLを辞め、ラトガース大学の管理職として3年間勤務した後、バージニア州の小さなスタートアップ企業で働いていました。そこにはMIPSワークステーションがありました。私はedを使って苦労して作業していました... 何も考えずに「fg」と入力してバックグラウンドジョブを取得しようとしました。驚いたことに、シェルは「ジョブ制御が有効ではありません」と表示しました。うーん、これは私のエラーメッセージだと思いました。「set -J」と入力すると、「ジョブ制御が有効です」と表示されました。おや!これが私のシェルです。結局、Doug Gwyn が私の改造を彼の「System V on BSD」配布テープに入れて、それが Mach コード ベースに組み込まれたため、すべての Mach 派生システムにそれが採用されることになったのです。
さらに読む
モリス・I・ボルスキー、デイビッド・G・コーン (1995). 新しいKornShellコマンドとプログラミング言語. プレンティス・ホール社. ISBN 978-0-13-182700-4 。
David G. Korn、Charles J. Northrup、Jeffery Korn (1996年7月). 「新しいKornShell—ksh93」. Linux Journal (27). 2015年10月11日時点のオリジナルよりアーカイブ。
外部リンク