Główna odpowiedź
Tak, aby odpowiedzieć na Twoje pytanie, możliwe jest użycie JavaScript jako „zwykłego” języka skryptowego z wiersza poleceń, bez przeglądarki. Skoro inni jeszcze o tym nie wspominali, to widzę, że warto wspomnieć:
W systemach opartych na Debianie (a dotyczy to przynajmniej Ubuntu, Linux Mint i aptosid / sidux), poza opcjami instalacji Rhino i innych, o których już wspomniano, masz inne opcje:
Zainstaluj libmozjs-24-bin
pakiet, który zapewni Ci silnik Spidermonkey Mozilli w linii poleceń jako prosty js24
, który może być również używany jako interaktywny interpreter. (Symbol 24
w nazwie oznacza, że odpowiada wersji 24 przeglądarki Firefox).
Zainstaluj libv8-dev
pakiet, który zapewni Ci silnik Google V8. Jako jeden ze swoich przykładów zawiera plik, /usr/share/doc/libv8-dev/examples/shell.cc.gz
który można zdekompresować i skompilować w bardzo prosty sposób (np g++ -Os shell.cc -o shell -lv8
.).
Zainstaluj pakiet, nodejs
a będzie on dostępny zarówno jako plik wykonywalny, nodejs
jak i jako alternatywa (w sensie Debiana), aby udostępnić js
plik wykonywalny. Kompilacja JIT jest udostępniana dzięki uprzejmości V8.
Zainstaluj pakiet libjavascriptcoregtk-3.0-bin
i użyj interpretera JavaScriptCore ( jsc
) WebKit jako zwykłego interpretera z wiersza poleceń. I to bez konieczności posiadania dostępu do komputera Mac. Na wielu platformach (np. X86 i x86_64) ten interpreter będzie dostarczany z kompilatorem JIT.
Tak więc, prawie bez kompilacji, będziesz mieć do dyspozycji trzy ciężkie silniki JavaScript.
Uzupełnienie
Po zainstalowaniu możesz po prostu utworzyć pliki za pomocą #!/usr/bin/js
linii shebang i wszystko będzie działać:
$ cat foo.js
#!/usr/bin/js
console.log("Hello, world!");
$ ls -lAF /usr/bin/js /etc/alternatives/js /usr/bin/nodejs
lrwxrwxrwx 1 root root 15 Jul 16 04:26 /etc/alternatives/js -> /usr/bin/nodejs*
lrwxrwxrwx 1 root root 20 Jul 16 04:26 /usr/bin/js -> /etc/alternatives/js*
-rwxr-xr-x 1 root root 1422004 Apr 28 20:31 /usr/bin/nodejs*
$ chmod a+x foo.js
$ ./foo.js
Hello, world!
$ js ./foo.js
Hello, world!
$