/bin/sh が dashにリンクされててびびった
ちらほらドキュメントも見かけたのでわりと有名なのかもしれませんね・・・いままで動いていたperlをubuntuに持っていったら動かなくなってびっくりしたのです。
Logを見る限りperlの内部でsystemでたたいているコマンドが動かなくなったんですね。わりとでかめのスクリプトだったので、とりあえずワンライナーをテスト用にたたいてみます。
$ perl -e 'system("ls -l <<< a ")' sh: Syntax error: redirection unexpected
あれーなんかへんだなーと思い、/bin/shを調べてみました。<<< はbash拡張で使える機能なのでbashがうまくたたけてないのかなー。
$ ls -l /bin/sh lrwxrwxrwx 1 root root 4 2009-01-09 16:02 /bin/sh -> dash
うーん問題ないよなぁ・・・ん?ちょっとまってくれ。dash?なんだソレ。と思って調べてみる。
Debian Almquist シェル
"dash" は POSIX 互換で "bash" よりずっと小さなシェルです。ディスク容量 が貴重である root フロッピでのインストール時にシェルとして使用すること によりその利点を活用します。
これを /bin/sh としてインストールすると便利です (なぜなら bash よりも 若干速くスクリプトを実行することができるからです)。また、root やユーザ ID が 0 の第 2 のユーザのデフォルトのシェルにするのも便利な使い方です (なぜなら "bash" よりライブラリへの依存数が少ないため、アップグレード 時の問題やディスクの異常に影響される確率が低いからです)。スクリプトが POSIX の文法だけを使っているかどうかをチェックするのにも便利です。
大半のユーザにとっては "bash" のほうが良いシェルです。なぜなら、"dash" にはない素敵な機能を備えているし、システムの必須部分として要求されてい るからです。
なるほどー。しかしながらちょっとキモチわるいですねぇ。というわけで修正。
$ sudo dpkg-reconfigure dash
めでたしめでたし。