#!(shabang)
みんな元気か!元気に#!打ってっか?
そういうことで、shでもperlでもrubyでもpythonでも
まーそのほかいろいろでも、cgiだのなんだのをスクリプト言語みたいなので
スクリプトファイルだけで動かしたきゃ
#!/usr/bin/perl
みたいのが必要なんだ。
でないと、
$ perl script.pl
みたいに実行しないといけない。
そこでgoogleのv8をshellで使いたいとする。
でもなんと、恐ろしい事に#!がヤツには通用しない。
なぜだ!
なので、ちょっと手を加えてみたよって言うお話。
ちなみに優秀な方は、「んなの常識だよ!」
って思ってらっしゃるかもしれないですが、ちょっと何言ってるかよく分からなかったので
ダサいやり方やってると思います。
たぶん、いろんな方のソース見ればもっとよく解決します。
まず、v8のshellの作り方は、こちらで
IT戦記
Google Chrome の JavaScript エンジン V8 を試す
http://d.hatena.ne.jp/amachang/20080903/1220405193
んで、僕が何を具体的にしてみたかっていうと、
javascriptって#がコメントアウトじゃないから、
スクリプト内に#!の記述があると、そこでエラーが出ちゃう。
だから、一行目に#!があったら、2行めからスクリプトとして評価してね
って言うプログラムをv8のサンプルで作れるshellに入れ込みましたって話。
sample/shell.cc
を書き換えてね。
もうめんどくせ。diffしたソース。
--- shell.cc.bk 2009-06-06 10:27:00.000000000 +0900 +++ shell.cc 2009-06-06 11:47:03.000000000 +0900 @@ -94,6 +94,12 @@ printf("Error reading '%s'\n", str); return 1; } + + v8::String::AsciiValue source_str(source); + if (strncmp(*source_str, "#!", 2) == 0) { + source = v8::String::New(strchr(*source_str, '\n')); + } + if (!ExecuteString(source, file_name, false, true)) return 1; }
あとは、またscons sample=shellみたいな感じでコンパイルし直すと
「#!」がつかえて、まぁいろいろ出来る訳です。