Monday, October 3, 2016 5:00AM to 11:00AM (UTC) Schedouled down time to change site domain

Korn――高機能なシェル

 Linuxのシェルについてはおそらくご存じのことだろう――LinuxでKonsoleやxtermなどの端末ウィンドウを開いてコマンドを入力するとき、文字を受け付けているのが他でもないLinuxのシェルだ。あるいはファイルにコマンドを書き込んで、実行可能にして、実行するということをしているのなら、あなたはもう立派なシェルプログラマだと言えるだろう。しかし利用可能なシェルには様々なものがあって、それぞれに少しずつ違った特徴があるということはご存じだろうか。そのようなシェルの中で個人的に私が気に入っているのがKornシェルだ――この記事を読み終わる頃には、あなたのお気に入りにもなっているかもしれない。

 一般的なLinuxでは、デフォルトでbash(Bourne again shell)が使用されている。そのbashからKornシェルに移行する前に、Kornシェルのメリットを整理しておこう。まず、Kornシェルのバイナリはbashのバイナリよりも小さいうえ、多くの関数(echogetoptsなど)が個別の実行ファイルではなくシェルの中に組み込まれている。言い換えれば、Kornシェルでは実行の際に使用するメモリ容量が少なくて済むのに加えて、実行が高速になることもあるということだ。さらに言えば、Kornシェルはbashとの完全な後方互換性を保っている。つまりKornシェルに移行した場合、Kornシェル独自の機能をまったく使わなかったとしても、すでに知っているコマンドをすべて利用し続けることが可能だということだ。またKornシェルには組み込みの算術式、複合変数、ディシプリン関数、コプロセスなどといった便利な機能がある。本稿中盤以降では、これらの各機能を紹介する。

 ところで、Kornシェルにそれほどの利点があるのであれば、なぜLinuxではデフォルトでKornシェルではなくbashが使用されているのか不思議に思うかもしれない。その理由は極めて単純で、単にそれまでそうなっていたからという理由だけだ。Unixのデフォルトのシェルはsh(Bourne shell)だったので、Linuxのデフォルトのシェルがbash(Bourne again shell)になったのは自然なことだった。当然ながらここでデフォルトと呼んでいるのは、実際には/etc/passwdの各ユーザの当該項目のことを指しているに過ぎない。つまり例えば/etc/passwdの中の項目が以下のようになっている場合には、このユーザのデフォルトのシェルはbashだ。

bainm:x:1000:100:Mark Alexander Bain:/home/bainm:/bin/bash

 また、以下のようになっている場合には、このユーザのデフォルトのシェルはksh(Korn shell)だ。

bainm:x:1000:100:Mark Alexander Bain:/home/bainm:/bin/ksh

 なお現在使用しているシェルは、システムの環境を問い合わせることによっても確認することができる。

> env | grep SHELL
SHELL=/bin/bash

 シェルをKornシェルに変更する前にKornシェルがシステムに実際にインストールされていることを確認しておいた方が良いかもしれない。そのためのもっとも簡単な方法は、次のようにして実行ファイルを確認することだ。

> ls -l /bin/bash /bin/ksh
ls: /bin/ksh: No such file or directory
-rwxr-xr-x 1 root root 677184 2006-12-11 21:20 /bin/bash

 Kornシェルの実行ファイルがない場合には、手元のディストリビューションのパッケージ管理ツールを利用して入手することができる。例えばSUSEの場合にはYastを利用し、Debianの場合には「apt-get install ksh」を実行すれば良いだろう。インストール後は、コマンドラインで「/bin/ksh」を実行すればKornシェルに移ることができる。また「exit」を実行すればKornシェルを終了してbashに戻ることができる。/etc/passwdの中の情報を変更すればKornシェルをデフォルトにすることができるが、その際には手元のディストリビューションのユーザ管理用ソフトウェアを利用するのがおそらく安全だろう。とは言えKornシェルを使用するにはシェルとして使用するという手以外にもスクリプトに使用するという手もある。そのためにはファイルの先頭に次のような一行を追加すれば良い。

#!/bin/ksh

 それではKornシェルを使い始めることで新たに得られる機能を紹介しよう。まずは、Kornシェルの組み込み算術式について述べる。