bash(GNU Bourne Again Shell)Tech Basics/Keyword

bashはUNIX/Linuxで一番多く使われている標準的なCUIのシェルプログラム。古いB Shellとの互換性を持たせつつ、インタラクティブに使う場合にも便利な機能を盛り込んでいる。Windows上で使えるようにしたbashも幾つかある。

» 2016年07月28日 05時00分 公開
[打越浩幸デジタルアドバンテージ]
「Tech Basics/Keyword」のインデックス

連載目次

 「bash(GNU Bourne Again Shell、バッシュ)」は、現在の多くのUNIXやLinuxなどでデフォルトとして使われているシェルプログラム(コマンドインタープリタ)。初期のUNIX上で動作していた、オリジナルのBourne Shellと互換性を維持しつつ、さまざまな機能拡張を行ったオープンソースのシェルプログラムである。Windows OSでも、UNIX/Linuxコマンドを移植した実行環境などを使えばbashを利用できる。

bashの実行例 bashの実行例
UNIXやLinuxを使うなら、Windowsと違って、シェル上でコマンドを入力して操作するのは避けられないだろう。bashはB Shellをベースにして、インタラクティブな操作もなるべく簡単に行えるように改良されたシェルである。

 シェルは、UNIXやLinuxにおいて、ユーザーが入力したコマンドを解釈してプログラムを起動したり、コマンド列が記述された「シェルスクリプト」ファイルを実行したりするためのプログラムである。コンピュータをキャラクタベース(CUI)で使うと言えば、通常はこのシェルを使ってコンピュータを操作することを指す。シェルは、Windows OSで言えばコマンドプロンプトやPowerShellのコンソールに相当する。

UNIX/Linuxシェルの歴史

 初期のUNIXには、Ken Thompson(オリジナルのUNIX開発者の一人)が作った、sh(/bin/sh)という名前のシェルプログラム(Thompson shell)が用意されていた。これは、コマンドに引数を渡して起動する他、ワイルドカード指定されたパス名の展開、ファイルへのリダイレクト、パイプによるコマンドの連続実行といった機能ぐらいしか持たない、シンプルなものであった。

 これでは非常に不便なので、制御構文や変数、関数定義など、さまざまな機能拡張を行ったシェルをStephen Bourneが開発し、もともとのThompson shellを置き換えた。これが「Bourne shell(B shell、ボーンシェル)」であり、UNIXやLinuxで単にシェルスクリプトと言えば、通常はこのB shell用に書かれているスクリプトを指す。

 B shellはスクリプトを記述するには十分な機能を持っていたが、コンピュータをインタラクティブに使うには機能が不足していた。例えば、今実行したコマンドを再実行したい場合でも、いちいち同じ文字列を入力する必要があった。そこで、コマンドの履歴機能(コマンド履歴の表示や編集と再実行)やエイリアス(別名)、パス名補完、ジョブ制御機能などを備え、C言語風の構文などがサポートされた「C Shell(csh)」がBill Joy(BSD UNIXの開発者)によって作られ、利用されるようになった。

 その後もさまざまなシェルプログラムが開発されており、ユーザーは好みに応じてシェルを選択することができた。主なシェルとしては、例えばKorn Shell(ksh。cshの機能などを参考にB shellを拡張したもの)、tcsh(cshの拡張版)、zsh(非常に高機能なシェル)、Almquist shell(A Shell。B Shellの小型軽量な機能拡張版)などがある。

 そんなところに登場したのがGNUプロジェクトのbashシェルである。bash以前にも多くのシェルが開発されていたが、スクリプトはB shellで記述しておくのが一番汎用性があるので(B shellはほぼ全てのシステムに搭載されているため)、B shellとの互換性があるのが望ましい。そしてLinuxに搭載するためにはオープンソースのシェルである必要があった。

 bashの「Bourne Again Shell」は「Born Again(生まれ変わり)」とかけていることからも分かるように、bashとの互換性を持ちながら、他のシェルで提供されていたさまざまな機能を取り込んで新しく作り直されたシェルである。

bashの機能

 主なbashの機能を次にまとめておく。

機能 概要
シェル変数/環境変数 システム全体で有効な環境変数や、シェル/スクリプト内でのみ有効なシェル変数などを使って、同じ処理でも対象やパラメーターを変えて実行する。変数への代入や参照、配列、置換、演算などが行える
シェル関数 複数のコマンドや処理などをまとめてシェル関数として定義しておくと、簡単に呼び出して実行できる
コマンド/パラメーター補完 [Tab]キーを押したときに補完する内容をシェル関数などで自由にカスタマイズできる
シェルオプション シェルの挙動や設定はset -oやshopt組み込みコマンドなどでカスタマイズできる
コマンド履歴/編集 以前実行したコマンドを再表示したり、その中から1つ選んで再実行したりする。カーソル移動が利用できる端末の場合は、矢印キーなどでカーソルを移動させて再編集し、簡単に再実行できる。文字の編集操作には、viモードかemacsモードが選択できる
ジョブ制御 実行中のプロセスを一時中断したり、バックグラウンドへ回したり、フォアグラウンドへ戻したりといった制御ができる
コプロセス シェルのバックグラウンドで動作するコプロセス(co-process)を作成して、そのプロセスと通信する(パイプ経由でデータを受け渡しする)ことができる
B Shellと比較した場合のbashの主な機能

 bashのコマンド(スクリプト)の例を次に示しておく。プログラミング言語と比較すると、とても洗練されているとは言えない文法だが、これは慣れるしかないだろう。一度覚えると、どのUNIX/Linuxでも使えるようになる。

bashのスクリプトの例 bashのスクリプトの例
これはbash起動時に自動的に読み込まれる初期化プロファイル(~/.bashrc)の一部。行頭に「#(シャープ)」があるのはコメント行なので無視すると、基本的には起動するコマンドが並んでいるだけである。「名前=値」は変数への代入、「if 〜 then 〜 fi」や「case 〜 esac」は制御構文。

bashとWindows OS

 Windows OS上でUNIXやLinuxのコマンドを実行する環境は幾つかあるが(TIPS「【総まとめ】Windowsコマンドプロンプトの入門から使いこなしまでの記事」中の「■UNIX互換シェル」の項参照)、それらをインストールしておくと、bashやUNIXのコマンド/手法を使って、Windowsのファイル管理やデータ整理などを行うことができる。

 またWindows 10では今後、LinuxのUbuntuディストリビューションの実行環境である「Windows Subsystem for Linux(WSL)」がサポートされることになっている(64bit版の一部のエディションのみ)。これをインストールすると、bashをはじめとして、Ubuntu向けのバイナリをWSL上にインストールしてそのまま使えるようになる。

「Windows Subsystem for Linux」上のbashの例 「Windows Subsystem for Linux」上のbashの例
これは、Windows 10(Insider Preview版。ビルド14393.5)の「Windows Subsystem for Linux」上でbashを使っているところ。Windows上にUbuntu環境のエミュレーション機能を実装し、その上でbashを動作させている。Ubuntu向けのバイナリがそのまま動作するのがメリットである。Linuxコマンドを使ってWindows側のファイルを操作できる。

「Tech Basics/Keyword」のインデックス

Tech Basics/Keyword

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。