2009年2月3日火曜日

シェルスクリプトと実行方法

シェルスクリプトは純粋なテキストファイルですからテキストエディタで書き起こしたり、修正することができます。そして、そのスクリプトを実行させるには端末からのシェルへの入力を代行させる意味で

$ sh < script

とシェルの標準入力に流し込む方法が使えます。また、シェルは引数があるとそれを入力ファイルとして扱いますから

$ sh script

としても構いません。しかし、このようにスクリプトを起動する度にシェルの引数とするのは面倒ですから、スクリプトに「実行権」を与えて使います。「実行権」とはminixのファイルシステムに用意されている許可属性の1つで、この権利が与えられているファイルはコマンドとして直接起動することができます。

テキストファイルとして書かれたスクリプトに実行権を与えるにはchmodコマンドを使用して、

$ chmod +x script

とします。このあとはスクリプトを修正してもファイルの実行権が失われることはありません。

このようにしてコマンドラインからシェルスクリプトを起動すると、カレントシェルは子プロセスとしてもう一つシェルを走らせ、そこでシェルスクリプトを実行します。この実際にスクリプトを実行するために走るシェルをサブシェル といいます。子プロセスのサブシェルは親プロセス(カレントシェル)の環境を受け継ぐことはできますが、その逆はできません。例えば、実行属性を与えたシェルスクリプトを使って環境変数を再設定しようとしても、再設定されるのはサブシェル側の環境変数であってカレントシェルのものではありません。

現在の環境変数を再設定するにはスクリプトをカレントシェルで実行しなければなりません。このためシェルにはドットコマンドと呼ばれるものが用意されおり、コマンドラインでドット .の後にスペースを置いて実行したいスクリプト名を書きます。

$ . script

ドット .を先頭に置くことによりカレントシェルは scriptを自分自身で実行しますので、現在の環境変数を再設定することができます。なお、ドット .に続く scriptには実行権の必要はありません。