BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

バッシュシェルの誕生

シェルスクリプトは、システム管理者タイプの役割を持つすべての人にとって不可欠な分野であり、今日人々がスクリプトを作成する主なシェルはBashです。 Bashは、ほぼすべてのLinuxディストリビューションと最新のMacOSバージョンでデフォルトとして提供されており、まもなくWindowsTerminalのネイティブ部分になる予定です。バッシュはどこにでもあると言えます。

では、どのようにしてこの点に到達したのでしょうか。今週のCommandLineHeroesポッドキャストは、コードを書いた人たちに質問することで、その質問を深く掘り下げます。

Unixから始まりました

すべてのプログラミングと同様に、Unixに戻らなければなりません。シェルの歴史:1971年、KenThompsonは最初のUnixシェルであるThompsonシェルをリリースしました。ただし、ユーザーが実行できるスクリプトの量には厳しい制限がありました。そしてそれは、自動化、ひいてはIT運用の全分野に深刻な制限をもたらすことを意味しました。

この素晴らしい調査では、スクリプトの初期の試みに対する課題の概要を説明しています(コマンドを強調するために太字で追加):

Multicsの前身と同様に、このシェル( / bin / sh )は、カーネルの外部で実行される独立したユーザープログラムでした。グロブのような概念(*。txtなどのパラメーター拡張のパターンマッチング ) globと呼ばれる別のユーティリティに実装されました 、 if 条件式を評価するコマンド。この分離により、シェルは小さく保たれ、Cソースの900ライン未満になりました。

シェルは、リダイレクト用のコンパクトな構文を導入しました( <> および>> )および配管( | または^ )それは現代の殻に生き残っています。シーケンシャルコマンドの呼び出しのサポートもあります(; を使用) )および非同期コマンド(を使用) 。

Thompsonシェルに欠けていたのは、スクリプトを作成する機能でした。その唯一の目的は、コマンドを呼び出して結果を表示するための対話型シェル(コマンドインタープリター)としての目的でした。

端末へのアクセスが増えるにつれて、自動化への関心も高まりました。

Bourneシェルは一歩前進です

Thompsonのリリースから6年後、1977年にStephen BourneはBourneシェルをリリースしました。これは、Thompsonシェルのスクリプトの制限を解決することを目的としています。 (1990年以来Bash言語の主要な保守者であるChet Rameyが、コマンドラインヒーローのこのエピソードでそれについて説明しています)。それは、Unixシステムの一部としてベル研究所から生まれたテクノロジーの自然な進化でした。

ボーンは何を変えるつもりでしたか?研究者M.ジョーンズはそれをうまく概説しています:

Bourneシェルには、2つの主要な目標がありました。オペレーティングシステムとスクリプト(シェルを介して呼び出すことができる再利用可能なスクリプトの作成)のコマンドをインタラクティブに実行するコマンドインタープリターとして機能することです。 Thompsonシェルを置き換えることに加えて、Bourneシェルは前任者に比べていくつかの利点を提供しました。 Bourneは、制御フロー、ループ、および変数をスクリプトに導入し、オペレーティングシステムと対話するためのより機能的な言語を提供しました(対話型と非対話型の両方)。シェルでは、シェルスクリプトをフィルターとして使用することもでき、シグナルを処理するための統合サポートを提供していましたが、関数を定義する機能がありませんでした。最後に、コマンド置換(バッククォートを使用)や、保存された文字列リテラルをスクリプト内に埋め込むためのヒアドキュメントなど、現在使用されている多くの機能が組み込まれています。

ボーンは、以前のインタビューで、次のように説明しています。

元のシェルは実際には言語ではありませんでした。これは記録であり、ファイルからコマンドの線形シーケンスを実行する方法であり、唯一の制御フロープリミティブはGOTOラベルです。ケントンプソンが書いた元のシェルに対するこれらの制限は重要でした。たとえば、コマンドファイル自体が標準の入力であるため、コマンドスクリプトをフィルタとして簡単に使用することはできませんでした。また、フィルターでは、標準の入力は、コマンドファイルではなく、親プロセスから継承したものです。

元のシェルは単純でしたが、人々がアプリケーション開発とスクリプト作成にUnixを使い始めたため、制限が多すぎました。変数がなく、制御フローがなく、見積もり機能が非常に不十分でした。

この新しいシェルは、スクリプト作成者にとって大きな前進でしたが、アクセスできる場合に限りました。

ボーンのシェルを自由ソフトウェアとして再考する

それまでは、主要なシェルはベル研究所で所有および運用されていたプロプライエタリソフトウェアでした。幸運なことに、大学はUnixシェルにアクセスできるかもしれません。しかし、その制限されたアクセスは、フリーソフトウェアファウンデーション(FSF)が達成したいと思っていた世界からはほど遠いものでした。

Richard Stallmanと志を同じくする開発者のグループは、GNUライセンスの下で無料で利用できるライセンスを使用してUnixのすべての機能を作成していました。それらの開発者の1人は、シェルの作成を任されていました。その開発者はBrianFoxでした。そして、彼が自分の仕事について話す方法は、私を絶対に魅了します。彼がポッドキャストで言っているように:

非常に困難だった理由は、Bourneシェルのすべての動作を忠実に模倣すると同時に、Bourneシェルを拡張して、人々が使用するためのより良いツールにする必要があったためです。

これは、シェル標準とはどういう意味かについて人々が話し合っていた時期でもありました。この歴史を背景として、そして最前線での競争により、人気のあるボーンシェルが再考されました。生まれ変わった。

シェル、Bourne-Again

これらの2つの触媒、つまり自由ソフトウェアの使命と競争は、Bourne-Againシェル(Bash)に命を吹き込みました。当時の珍しい動きで、フォックスは自分のシェルに自分の名前を付けず、Unixからフリーソフトウェアへの進化に焦点を合わせました。 (Fox ShellはFishshellをfshコマンド#missedopportunityに打ち負かすことができたかもしれませんが)。その命名の選択は、彼の性格と一致しているようです。フォックスがエピソードで言っているように、彼は個人的な栄光の認識にさえ興味がありませんでした。彼はプログラミングの文化が進化するのを助けようとしていました。しかし、彼はしゃれを上回っていませんでした。

ボーンが言葉遊びに軽視されていないと聞いて良かったです。ボーンは、誰かが彼に近づき、会議で彼にバッシュのTシャツを渡したときの話をします。その人はブライアンフォックスでした。

シェル リリース済み 作成者
トンプソンシェル 1971 ケントンプソン
ボーンシェル 1977 スティーブンボーン
ボーンアゲインシェル 1989 ブライアンフォックス

時間とともに、Bashの採用は拡大しました。他のエンジニアはそれを使い始め、その設計に改善を提出しました。実際、数年後、Foxは、Bashの制御を放棄することを学ぶことは、彼の人生で最も重要なことの1つであると主張しました。 UnixがLinuxとオープンソースソフトウェアの動きに取って代わったとき、Bashはオープンソースの世界で重要なスクリプトの力になりました。優れたプロジェクトは、1人のビジョンの範囲を超えて成長しているようです。

シェルから何を学ぶことができますか?

シェルは、日常のラップトップの使用に不可欠なテクノロジーであるため、発明が必要だったことを忘れがちです。 ThompsonからBourne、Bashシェルに移行するという話には、おなじみのポイントがいくつかあります。

  • やる気のある個人は、適切な使命を念頭に置いて大きな進歩を遂げることができます。
  • 今日私たちが依存しているものの多くは、私たちの業界でまだ生きている伝説の仕事に基づいています。
  • 存続する傾向のあるソフトウェアは、元の作成者のビジョンを超えて進化するソフトウェアです。

Command Line Heroesは、シーズン3のすべてのプログラミング言語をカバーしており、フィナーレに近づいています。プログラミング言語の起源について知りたいことをすべて学ぶために購読してください。以下のコメントであなたのシェルストーリーを聞いてみたいです。


  1. さまざまなLinuxディストリビューションの歴史

    Linuxは、1991年に始まって30年前から存在しています。そうです、それはとても古く、歴史を作ったのです。いくつかの主要なLinuxディストリビューションの歴史に興味がある場合は、ここに簡単に説明します。Ubuntu、Fedora、REHL、Linux Mint、SlackwareなどのさまざまなLinuxディストリビューションの歴史です。作成され、それぞれの違いは何ですか。 注 :そこにはたくさんのディストリビューションがあるので、私たちはいくつかの主要なディストリビューションにのみ焦点を合わせています。 Linux自体の歴史 ディストリビューションに進む前に、Linux自体の歴史を

  2. jm-shell –非常に有益でカスタマイズされたBashシェル

    jm-shell は無料のオープンソースで、小さく、非常に有益で、カスタマイズされたBashシェルであり、シェルアクティビティに関する豊富な情報だけでなく、システム負荷平均、ラップトップ/コンピューターのバッテリーステータスなどの特定の有用なシステム情報を提供します。 重要なのは、バッシュとは異なり 以前に実行されたコマンドを検索するために、一意のコマンドのみを履歴ファイルに保存します–jm-shellはすべてのシェルアクティビティをログファイルに記録します。 また読む :BashShellのLinux「HistoryCommand」の力 さらに、現在のディレクトリが Gitなどのバ