Eyes, JAPAN Blog > Linux ユーザにありがちなこと

Linux ユーザにありがちなこと

Masato Kaneko

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

今日は、このブログでは約 2 年半ぶりにシェルスクリプトに関して少しだけ取り上げたいと思います。

私は最近、PC-UNIX として Linux だけでなく FreeBSD や OpenBSD、Solaris などの他のフリーの UNIX 系 OS にも触れるようにしています。
というのも、Linux にだけ精通していて他の UNIX 系 OS に関しては全く知らない、全く触ったことがない、というのでは、UNIX Hacker を目指す自分としてはあってはならないことだと思っているからです。
また、非常に高価で個人では手に入れることが出来ないような OS ならともかく、無料で公開されているものも多いので、実際にインストールして試してみないのはもったいないというのも理由としてあります。

前置きが長くなってしまいましたが、メインでは Linux (Gentoo Linux) を使うことが多い、自分のような Linux ユーザが陥りがちな問題に関して、今日は取り上げます。
Linux ユーザならば、システム管理作業や日常のちょっとした作業の自動化などにシェルスクリプトを使うことは多いと思います。
しかしながら最近思うのが、Linux ユーザが言う シェルスクリプト は、多くの場合は Bash スクリプト を指しているのだということです。
一見すると シェルスクリプトBash スクリプト は同じように見えるのですが、厳密には違うものです。
シェルスクリプトというのは正確には Bourne シェルスクリプト のことを表しています。
Linux 以外の UNIX 系 OS では、多くの場合システムに標準で用意されているのは Bash ではなく Bourne Shell です。
そして、シェバング (Shebang) が #!/bin/sh になっているスクリプトで、Linux ユーザが書いたものは、FreeBSD や Solaris などの他の UNIX 系 OS にコピーした場合に動かないことが多いのです。
何故動かないかというと、Bash 特有の拡張機能が使われていたり、Bash 特有の文法を使って書かれていたりするからです。
具体的には、シェルスクリプト中で配列を使ったり、関数の宣言の仕方が間違っていたりといったことです。(正確には 間違っている のではなく、Bash 独自の文法を使っているというだけですが)
Linux ユーザがしばしばこの問題に陥る理由はというと、通常の Linux ではシステムの標準のシェル (/bin/sh) が Bash へのシンボリックリンクになっているからです。
確かに Bash は高機能で、シェルスクリプトのインタプリタとして使うのにも非常に快適ですが、日頃から高機能な Bash スクリプトだけを書くようにしていると、伝統的なシェルスクリプト (Bourne シェルスクリプト) とは大きく違った書き方をしてしまい、さらにはそれに慣れてしまうという問題があります。
なので自分のような Linux ユーザが他の UNIX 系 OS を使うようになった時に、自分が書いたシェルスクリプトが動かないという問題が起こらないように、以下の点を心掛けてみてはいかがでしょうか?

  • Bash スクリプトの場合は、シェバングでは明示的に Bash を指定する。(#!/bin/bash など)
  • 日頃からシェルスクリプト作成時には、Bourne Shell により近い Dash (Debian Almquist Shell) を使う。

これらのことに意識してシェルスクリプトコードを書けば、Linux で書いたシェルスクリプトが他の UNIX 系 OS で動かないということ (OS 特有のパスの部分などを除く) は少なくなるのではないかと思います。
Linux ユーザのみなさんは是非実践してみてください 🙂

Author: Masato Kaneko

Comments are closed.