Bash シェルは 30 年以上前から存在していますが、まだ強力です。これは何をするのでしょうか、どこから来たのでしょうか、そしてなぜそれが依然として Linux システムで最も一般的なシェルなのでしょうか?
シェルとは何ですか?
ターミナル ウィンドウを開いてコマンドを入力すると、何かが入力した内容を取得し、意図した内容を理解して、要求したタスクを実行する必要があります。これを行うソフトウェアがシェルです。シェルはコマンドインタープリタです。ユーザーが入力した内容をスキャンし、コマンド、ディレクトリ名、ファイル名、プログラム名を抽出して、ユーザーが何を達成しようとしているのかを判断します。
「ターミナル ウィンドウ」、「コマンド ライン」、「シェル」というフレーズを同じ意味で使用することがよくありますが、これら 3 つは別のものです。端末ウィンドウは、物理的な テレタイプ端末 をソフトウェアで表現したものです。コンピューターに接続できるようになります。何か役立つことを行うには、コマンド ラインで命令を入力できなければなりません。コマンド ラインはシェルによって提供され、ターミナル ウィンドウからシェルにアクセスできます。
シェルを使用すると、コマンドのコレクションをスクリプトと呼ばれるテキスト ファイルにまとめることができます。スクリプトを実行するたびに、スクリプト内のすべてのコマンドが実行されます。スクリプトは効率性、再現性、利便性を実現します。
最初の Unix シェルは Thompson シェル で、
sh
。これは Ken Thompson によって書かれました。彼はおそらく ベル研究所 の初代 Unix 創設者の中で最も主要なメンバーです。 Thompson シェルは、Unix バージョン 6 まではデフォルトの Unix シェルとして使用されていました。1979 年の Unix バージョン 7 では、 Bourne シェル に置き換えられました。
ボーン・シェル
Stephen Bourne によって作成された Bourne シェルは、Thompson シェルのアップグレードされた代替品でした。 Thompson シェルと同じコマンドを使用して起動することもできました。
sh
、既存のスクリプトとの下位互換性を維持するため。下位互換性は重要でしたが、現在でも使用されている多くの機能を提供する新機能が組み込まれました。
Bourne シェルは対話型シェルおよびスクリプト言語でした。フォアグラウンドおよびバックグラウンドのタスク実行と基本的なジョブ制御をサポートしました。ループの処理が改善されるとともに、パイプとリダイレクトが追加されました。
シェルにはいくつかの組み込みコマンドが含まれるようになりました。つまり、すべてを外部ユーティリティに渡す必要がなくなり、効率が向上しました。 Bourne シェルは 、コマンドへのデータの送信を自動化するエレガントな方法である「ヒア ドキュメント」 もサポートしていました。
Bourne シェルは基準を引き上げ、新しい標準になりました。
バッシュの誕生
1984 年に、 GNU プロジェクトが 無料の Unix クローンを作成する意向を発表したとき (ゼロから作成され、 新しい寛容なライセンスが 適用されました)、チームはシェルを必要としていました。 GNU プロジェクトのシェルに取り組んでいたボランティアが、何度もまったく成果を出せなかったとき、 ブライアン フォックスは、 Bourne シェルのクローンを書く任務を与えられました。
これは 、Bourne Again Shell 、または Bash と呼ばれていました。これは、一部はスティーヴン・ボーンへのオマージュであり、一部はそれのための言葉遊びでした。 1989 年のリリース後、 Chet Ramey は Bash にいくつかのバグ修正を提供しました。彼は最終的に Bash シェルの共同メンテナになりました。現在も彼は Bash プロジェクトのメンテナーを務めています。
Linux カーネルの作成者である リーナス・トーバルズ 氏は、1991 年に新しいカーネルで実行した最初の 2 つのプログラムは Bash と
gcc
、 GNU のコンパイラ 。 GNU ユーティリティと Linux カーネルの組み合わせは相互に有益でした。 GNU オペレーティング システムにはカーネルが必要で、Linux カーネルには Unix クローンを構成するその他すべてのものが必要でした。
Bash は標準の GNU シェルであるため、すべての GNU/Linux ディストリビューションの標準シェルになりました。 Linux は現在、 現代世界の驚くべき部分 を支えるまでに繁栄しました。 Bash シェルもその成功の波に乗りました。
Bash は、Bourne シェルの機能セットを組み込んで改良していますが、 C シェル (
csh
) と KornShell (
ksh
)。たとえば、チルダ「」の展開
~
” に保持されている値に
$HOME
環境変数は C シェルから取得され、
fc
コマンド履歴 内のコマンドに対してデフォルトのエディターを呼び出すコマンドは、KornShell から取得されます。
Bash では 、「.bashrc」ファイルや「.bash_profile」ファイル などの構成ファイルが導入されました。 Bash でのコマンドライン編集は、以前のシェルの機能をはるかに上回りました。コマンド履歴内の以前に実行されたコマンドの操作は、C シェルの「bang 履歴」機能の改良版でした。中括弧の展開は、Bourne シェルにはなかった機能で、C シェルにある機能のスーパーセットとして Bash に実装されました。配列は、サイズ制限を削除することで改善されました。コマンド プロンプトでパラメータを展開すると、ユーザーは Bash プロンプトをカスタマイズできます。
Bash シェルは 、POSIX P1003.2/ISO 9945.2 シェルおよびユーティリティ 標準に準拠することを目指しています。
Bash が依然として重要な理由
Bash がその役割を果たしていなかったら、デフォルトの Linux シェルとしてこれほど長く (30 年以上) 存続することはできなかったでしょう。 Bash はサービス寿命が長く、ユーザー ベースが大きいため、成熟しており、非常に安定しています。 C シェルや KornShell などのベテランから Z シェル (
zsh
) と フレンドリーな対話型シェル (
fish
)。 Z シェルとフィッシュ シェルの両方には、Bash にはない機能がいくつかあり、おそらく Bash と同じことのいくつかを実現するより良い方法があります。では、なぜ Bash が依然として主要なシェルなのでしょうか?
私がこれまでに管理を依頼されたすべての Linux マシンの中で、シェルとして Bash を持たなかったマシンは 1 つもありませんでした。 Unix マシンはそうですが、Linux ボックスはそうではありません。毎回バッシュですよ。慣れているため、すぐに作業に取り掛かり、すぐに効果を発揮できます。 Bash についてはすでに知っているので、学習する必要はありません。構文の小さな違いによって行き詰まり、なぜ何かが機能しないのかを解明しようとして堂々巡りする必要はありません。このシェルでどのような呪文を表現すべきかを考えるのに費やす時間は無駄なので、よく知られ広く使用されているシェルを使用することがクライアント ビジネスの利益になります。
POSIX に準拠しているシェルを使用することは、多くの Linux ディストリビューションにとって重要ですが、それよりも重要なのは、以前のリリースとの互換性です。既存のスクリプトを破壊する可能性のある変更を加えるのは明らかに魅力的ではありません。魅力的かどうかにかかわらず、時には、我慢しなければならないこともあります。 1967 年 9 月 3 日、スウェーデンは左側通行から右側通行に切り替わりました。午前4時50分、すべての交通は停止し、ゆっくりと道路の反対側に進み、再び停止しなければなりませんでした。午前 5 時に交通が進み、全員が右側通行になりました。
バッシュが置き換えられることはあるのでしょうか?
今は考えられないことでも、後になって実際に起こる可能性があります。終末まで誰もが Bash を使用するという信念にしがみつきたくないのなら別ですが、真実はおそらく、それがまだ GNU 標準シェルであるかどうかにかかわらず、いつか Bash がデフォルトの Linux シェルに取って代わられることでしょう。あるいは、Bash になるかもしれませんが、現在使用されているシェルをはるかに超えて強化されています。しかし、今日の Bash に代わるものは何であれ、完全に (またはほぼ) 下位互換性があるか、メリットが何であれ、大変動を起こす価値があるかのどちらかでなければなりません。
これには前例がないわけではない。 macOS の バージョン 10.15 以降、Apple は Bash を廃止し、Z シェルをデフォルトのシェルとして採用しました。 Apple には GNU General Public License (GPL) v.3 に問題があります。残念ながら、これは Bash が使用するライセンスです。 GPL v.2 に基づいてリリースされた Bash の最後のバージョンは、2007 年のバージョン 3.2 でした。現在のバージョンは 5.1 です。 Appleは10年半近く遅れを取っていた。 Apple が GPL v.3 に移行せずに最新のシェルを組み込む唯一の方法は、完全に別のシェルに移行することでした。 Appleにとって、それは大混乱を招く価値のあるものだった。 (ただし、必要に応じて こともできます。)
パワー ユーザーのワークステーションと、 SSH 接続経由で リモート管理する必要がある基幹業務 Linux サーバーとの間には、まったくの違いがあります。約 150 万台の Amazon EC2 ホスト型サーバーのうち、 93% 以上が Linux を実行しています 。 Web サーバーのほぼ 75% が Linux を実行しています 。 Red Hat、Amazon、Google などの組織は社内で Linux を使用しています。
この種の世界的大変動を正当化するような新しい砲弾がどのような利益をもたらすのかを想像するのは難しい。だからこそ、Bash はしっかりと固定されています。
Microsoft さえも、 Windows 10 上で Linux ベースの Bash シェルを実行する 方法を提供しています。





