Nashorn(Java8のJavaScriptエンジン)でシェルスクリプト
Java SE 8 からバンドルされる JavaScript エンジンが Rhino から Nashorn に変わります。
そこで シェルスクリプトから Nashorn を試してみました。
スクリプト引数
args.js
#!/usr/bin/jjs print(arguments); print(arguments[0]); print(arguments[1]); print(arguments[2]); print($ARG); print($ARG[0]); print($ARG[1]); print($ARG[2]);
arguments か $ARG で引数が参照できます。
実行結果
# ./args.js -- arg1 arg2 arg3 arg1,arg2,arg3 arg1 arg2 arg3 arg1,arg2,arg3 arg1 arg2 arg3
変数埋め込み文字列
string.js
#!/usr/bin/jjs var date = Date(); print("Date and time: ${date}"); print('Date and time: ${date}');
ダブルクォートで括った文字列は、変数が展開され、シングルクォートで括られた文字列は変数が展開されません。
実行結果
# ./string.js Date and time: Mon Mar 10 2014 04:58:12 GMT+0900 (JST) Date and time: ${date}
ヒアドキュメント
heredoc.js
#!/usr/bin/jjs
var sql = <<EOD
select
id
name
from employee
where department_id=1
EOD
print(sql);
実行結果
# ./heredoc.js select id name from employee where department_id=1
ヒアドキュメントが使えるのは、嬉しい!
外部コマンドの実行
exec.js
#!/usr/bin/jjs
$EXEC("ls -l");
print($OUT);
`ls -l`;
print($OUT);
$EXEC または、バッククォートで括ると外部コマンドが実行できます。実行結果の標準出力は、$OUT に格納されます。
実行結果
# ./exec.js total 32 -rwxr-xr-x. 1 root root 190 Mar 10 05:09 args.js -rwxr-xr-x. 1 root root 36 Mar 10 05:09 env.js -rwxr-xr-x. 1 root root 70 Mar 10 05:09 exec.js -rwxr-xr-x. 1 root root 115 Mar 10 05:09 heredoc.js -rwxr-xr-x. 1 root root 65 Mar 10 05:09 readfully.js -rwxr-xr-x. 1 root root 88 Mar 10 05:09 readline.js -rwxr-xr-x. 1 root root 103 Mar 10 05:09 string.js -rw-r--r--. 1 root root 84 Mar 10 05:09 text.txt total 32 -rwxr-xr-x. 1 root root 190 Mar 10 05:09 args.js -rwxr-xr-x. 1 root root 36 Mar 10 05:09 env.js -rwxr-xr-x. 1 root root 70 Mar 10 05:09 exec.js -rwxr-xr-x. 1 root root 115 Mar 10 05:09 heredoc.js -rwxr-xr-x. 1 root root 65 Mar 10 05:09 readfully.js -rwxr-xr-x. 1 root root 88 Mar 10 05:09 readline.js -rwxr-xr-x. 1 root root 103 Mar 10 05:09 string.js -rw-r--r--. 1 root root 84 Mar 10 05:09 text.txt
標準入力の読み込み
readline.js
#!/usr/bin/jjs var name = readLine("What is your name? "); print("Hello, ${name}!");
readline 関数で標準入力を読み込めます。
実行結果
# ./readline.js What is your name? Bob Hello, Bob!
'What is your name?'の後ろの 'Bob' がキーボードからの入力です。
テキストファイルの読み込み
readfully.js
readFully 関数でテキストファイルを読み込めます。
#!/usr/bin/jjs var text = readFully("text.txt"); print(text);
実行結果
This is the contents of the text.txt file located in the current working directory.
以上ですが、まぁ ここ
Nashorn and Shell Scripting
を試したみた感じです。
Rhino に比べ大分便利になっている感じです。パフォーマンスはどうなのか分かりませんが。。
地味に Rhino にはお世話になってきましたが、 Nashorn も今後利用してみたいところです。