是否可以使用shebang但以某种方式从JavaScript解释器“隐藏”它?

时间:2012-06-08 00:14:35

标签: javascript phantomjs interpreter shebang

我想我的问题很难破译(随意完善它)。但它涉及在脚本中使用shebang行 - 特别是在这种情况下,JavaScripts。假设我有这个phantomjs脚本:

#!/usr/bin/env phantomjs

/*
Requires phantomjs to be installed (e.g. via Homebrew on Mac)

Example URL:
http://code.google.com/p/phantomjs/wiki/QuickStart#DOM_Manipulation
*/

var page = require('webpage').create(),
    url = 'http://lite.yelp.com/search?find_desc=pizza&find_loc=94040&find_submit=Search';

page.open(url, function (status) {
    if (status !== 'success') {
        console.log('Unable to access network');
    } else {
        var results = page.evaluate(function() {
            var list = document.querySelectorAll('span.address'), pizza = [], i;
            for (i = 0; i < list.length; i++) {
                pizza.push(list[i].innerText);
            }
            return pizza;
        });
        console.log(results.join('\n'));
    }
    phantom.exit();
});

我怀疑这是一个非常荒谬的问题,但是:

是否有任何可能的技巧可以让你保留一个shebang行,例如上面的代码 - 这样你就可以执行文件而不需要在脚本执行前加上(在这种情况下)phantomjs - 和仍然在JavaScript中解释没有错误?

如果没有,是否有其他语言解释器(例如Ruby,Python)“接受”shebang行,或者更好的是,有办法忽略它们吗?

2 个答案:

答案 0 :(得分:4)

Node.js 确实忽略shebang行(如果存在),并且在他们的解释器中处理它是一个特殊的例外。 PhantomJS也必须添加这样的支持,因为Javascript不会使用来发表评论。

如果你没有加入PhantomJS,你可以随时使用Zombie library for Node.js并完成你在示例代码中所做的事情。

答案 1 :(得分:2)

我不知道你的第一个问题的答案,但答案对你的第二个问题是肯定的。例如,Racket允许以下脚本:

#! /usr/bin/env racket
#lang racket
"Hello, world!"

由于#!被忽略为行注释。