2012-06-08 1 views
2

Я думаю, мой вопрос довольно сложно расшифровать (не стесняйтесь его совершенствовать). Но это относится к использованию строк shebang в скриптах - в частности, в данном случае JavaScripts. Скажем, у меня есть этот phantomjs скрипт:Можно ли использовать shebang, но как-то «скрыть» его от интерпретатора JavaScript?

#!/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(); 
}); 

Я подозреваю, что это очень смешной вопрос, но:

Есть ли возможно трюк, который позволяет держать притон линию, например, как в приведенном выше коде - так что вы можете выполнить файл без необходимости префикса выполнения скрипта (в данном случае) phantomjs - и все еще он интерпретируется без ошибок в JavaScript?

Если нет, существует ли какой-либо переводчик другого языка (например, Ruby, Python), который «принимает» линии shebang, или еще лучше, имеет возможность игнорировать их?

+0

Конфликт «hash bang» основан на интерпретаторе, игнорирующем строки, начинающиеся с «#». – Pointy

+0

Возможный дубликат [Как сделать поддержку javascript shebang (#!)?] (Http://stackoverflow.com/questions/10696222/how-to-make-javascript-support-shebang) –

+0

@OliCharlesworth Согласен! Я нажал «закрыть» и проголосовал, чтобы объединить его с вопросом, на который вы указали. В настоящее время говорится, что для его объединения требуется еще 3 голоса. (Извините за дубликат!) – Henrik

ответ

3

Node.js игнорировать линию shebang, если она существует, и является особым исключением в их интерпретаторе для ее обработки. PhantomJS также должен будет добавить такую ​​поддержку, поскольку Javascript не использует # для комментариев.

Если вы не подключены к PhantomJS, вы всегда можете использовать Zombie library for Node.js и выполнить то же самое, что и в своем примере кода.

+1

На самом деле я обнаружил, что phantomjs 1.5.0, похоже, принимает/игнорирует строку shebang, если выполняется сценарий как «phantomjs shebang-prepended-javascript.js» (И, таким образом, я чувствую себя совершенно немым для задавая этот вопрос, но эй, никакого вреда я надеюсь :) – Henrik

2

Я не знаю ответа на ваш первый вопрос, но ответ «да» на ваш второй вопрос. Например, Racket позволяет следующий сценарий:

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

Поскольку #! игнорируется как линейный комментарий.

Смежные вопросы