2

我想我的问题很难解读(请随意完善它)。但它与脚本中 shebang 行的使用有关——特别是在这种情况下是 JavaScript。假设我有这个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 行,或者更好的是,有办法忽略它们?

4

2 回答 2

4

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

但是,如果您没有附加到 PhantomJS,您始终可以使用Node.js 的 Zombie 库并完成您在示例代码中所做的相同事情。

于 2012-06-08T00:29:11.550 回答
2

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

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

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

于 2012-06-08T00:17:46.847 回答