スクリプト先頭の「#!」に相当する記号をLinuxに追加する
Unix系OSでは、ファイルの最初の行に「#!」で始まる行を入れると、続けて書かれたコマンドにより以降を実行します。
最近のLinuxでは、同様のことをユーザーが設定できるbinfmt_miscというしくみ(カーネルモジュール)があるということを、「東京エリアDebian勉強会」という勉強会で知りました。さっそく試してみます。以下、Ubuntuでの例です。
まず、binfmt_miscモジュールを確認します。
$ lsmod | grep binfmt binfmt_misc 16904 1
入っています。標準で定義されている設定は、こんな感じです。
$ ls /proc/sys/fs/binfmt_misc cli jar python2.5 register status
さて、以下のPerlスクリプトを用意します。「#!」行はわざと省略しています。
use strict; use warnings; print "Hello\n";
実行権限はつけておきます。
$ chmod +x hoge.pl
binfmt_miscを設定するために、Debian系Linuxでは、update-binfmtsというコマンドが用意されています。「use strict」という文字列を、perlコマンドに関連づけてみましょう。
$ sudo update-binfmts --package perl --install perl /usr/bin/perl --magic 'use strict'
では実行してみます。
$ ./hoge.pl Hello
めでたしめでたし。
追記2009-04-19:
#!で十分な例をあげておいて恐縮ですが、binfmt_miscがいちばん活躍するのはバイナリファイルの場合です。たとえば、Javaのバイトコードのファイルを実行するとJava Runtaimeを起動するとか、.NET Frameworkなファイルを実行するとMonoを起動するとか、Pythonの中間コードを実行するとPythonを起動するとかいったふうに使われているそうです。
コメント
コメントの投稿
トラックバック
https://emasaka.blog.fc2.com/tb.php/596-2d56b029
[勉強会][Debian][gadget]第51回 東京エリアDebian勉強会 参加してきた。
今回は”Javaポリシーを読んでみた”というネタで話をしてきた。原文がどうも部分的に内容が古くアップデートされていないように見受けられたり、自分の英語力が足りないのか原文の説明が不足しているのか、これじゃ意味がよく分からんという箇所も多々見られ*1、話の内容...

