本を読む

読書やコンピュータなどに関するメモ

スクリプト先頭の「#!」に相当する記号を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を起動するとかいったふうに使われているそうです。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/596-2d56b029

[勉強会][Debian][gadget]第51回 東京エリアDebian勉強会 参加してきた。

今回は”Javaポリシーを読んでみた”というネタで話をしてきた。原文がどうも部分的に内容が古くアップデートされていないように見受けられたり、自分の英語力が足りないのか原文の説明が不足しているのか、これじゃ意味がよく分からんという箇所も多々見られ*1、話の内容...

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad