Rhino Shell

JavaScript shell はバッチモードでスクリプトを走らせるシンプルな方法、または調査的なプログラミングのための対話環境を提供します。

シェルの呼び出し

java org.mozilla.javascript.tools.shell.Main [<var>オプション</var>] <var>ファイル名-or-url</var> [<var>スクリプト引数</var>]

options については...

-e script-source

script-source を JavaScript スクリプトとして実行する。

-f script-filename-or-url

script-filename-or-url (ファイル名あるいは URL) の内容を読み込んで、JavaScript スクリプトとして実行する。

-opt optLevel / -O optLevel

optLevel のレベルで最適化を行う。それは -10 から 9 の間の整数でなければならない。詳しくは、最適化 を参照のこと。

-version versionNumber

指定の言語バージョンとしてコンパイルする。 versionNumber の値は、100110120130140150 、160あるいは 170 のいずれかでなければならない。言語バージョンについて、詳しくは JavaScript 言語バージョン を参照のこと。

-strict

厳密 (strict) モードを有効にする。

-continuations

継続 (continuation) の実験的なサポートを有効にして、インタープリターモードを強制するため最適化レベルを -1 にします。【訳注: 現在はこのオプションは無効のはず。continuation を使用するには -opt -1 を指定する】

注記

システム・プロパティ rhino.use_java_policy_securitytrue にセットした状態で、導入されたセキュリティマネージャのもとで、シェルが起動される場合、シェルは Java ポリシー設定に従い、それらの URL に基づいたスクリプトのパーミッションを制限します。これは、JVM が Java2 セキュリティモデルを実装する場合のみ、利用可能です。

定義済みプロパティ

シェルで実行するスクリプトは、いくつかの追加されたトップレベル・オブジェクトのプロパティーへアクセスできます。

arguments

arguments オブジェクトは、シェル起動時にコマンドラインで与えられた、すべての引数の文字列で構成された配列です。

help()

help 関数を実行すれば、使用方法とヘルプメッセージを表示するはずです。

defineClass(className)

文字列引数 className で指名された Java クラスを使って、拡張機能を定義します。拡張機能を定義するために、ScriptableObject.defineClass() を使用します。

deserialize(filename)

指定のファイルから、前もって serialize を呼んで書き込んでいたオブジェクトを、復元します。

load([filename, ...])

文字列引数で指名された JavaScript ソースファイルをロードします。複数の指定があると、それぞれのファイルを順番に読み込んで実行します。

loadClass(className)

文字列引数 className で指名されたクラスを、ロードし実行します。そのクラスは、スクリプトのインターフェースを実装したクラスでなければならず、それは多分 Rhino JavaScript Compiler によってコンパイルされたスクリプトのはずです。

print([expr ...])

式を評価してプリントします。それぞれの式を評価し、結果をストリングへ変換、そしてそれをプリントします。

readFile(path [, characterCoding)

与えられたファイルを読み込み、指定の文字コード、あるいは明示的な指定がなければデフォルト文字コードを使って、そのバイト列をストリングへ変換します。

readUrl(url [, characterCoding)

与えられた url で接続を開始し、接続からの入力のバイト列をすべて読み込んで、指定の文字コード、あるいは 明示的な指定がなければデフォルト文字コードを使って、ストリングへ変換します。

runCommand(commandName, [arg, ...] [options])

与えられた引数とオプションで、指定のコマンドを 切り離された (孤立した) プロセスとして実行し、そして、プロセスの exit status を返します。

Usage:

runCommand(command)
runCommand(command, arg1, ..., argN)
runCommand(command, arg1, ..., argN, options)

All except the last arguments to runCommand are converted to strings and denote command name and its arguments. If the last argument is a JavaScript object, it is an option object. Otherwise it is converted to string denoting the last argument and options objects assumed to be empty.

The following properties of the option object are processed:

  • args - provides an array of additional command arguments
  • env - explicit environment object. All its enumeratable properties define the corresponding environment variable names.
  • input - the process input. If it is not java.io.InputStream, it is converted to string and sent to the process as its input. If not specified, no input is provided to the process.
  • output - the process output instead of java.lang.System.out. If it is not instance of java.io.OutputStream, the process output is read, converted to a string, appended to the output property value converted to string and put as the new value of the output property.
  • err - the process error output instead of java.lang.System.err. If it is not instance of java.io.OutputStream, the process error output is read, converted to a string, appended to the err property value converted to string and put as the new value of the err property.

seal(object)

指定のオブジェクトを封印します。プロパティーを追加・削除・変更するどんな試みも、例外をスロー (throw) するでしょう。

serialize(object, filename)

オブジェクトを与えて、指定のファイルへ シリアライズ (直列化) します。

spawn(functionOrScript)

関数かあるいはスクリプトを与えて、別スレッドとして実行します。

sync(function)

既存の関数をもとに、同期化された関数 (Java の synchronized メソッドのような感じ) を作成します。新しい関数は、その呼び出しのオブジェクトの this について、同期化します。

quit()

シェルを終了します。プロンプトで EOF 文字をタイプ (入力) すれば、インタラクティブ (対話式) モード中であるシェルは終了するはずです。

version([number])

JavaScript バージョン番号を取得 / 設定します。引数がなければカレント・バージョン番号を返します。引数があれば、100110120130140150、あるいは 160 のいずれかを期待され、それぞれ JavaScript バージョンの 1.0、1.1、1.2、1.3、1.4 を表しています。

実例

起動

ここでは、シェルはコマンドラインから 3 回起動されます (システムコマンドプロンプトは $ で示される)。最初の起動は、コマンドライン自体に指定されたスクリプトの実行です。次の起動は引数がないので、シェルはインタラクティブ (対話式) モードに入り、タイプインそのままに、おのおのの行を読み込んで評価します。最後の起動例は、ファイルのスクリプトを実行し、スクリプト自体の引数にアクセスします。

$ java org.mozilla.javascript.tools.shell.Main -e print('hi')
hi
$ java org.mozilla.javascript.tools.shell.Main
js> print('hi')
hi
js> 6*7
42
js> function f() {
  return a;
}
js> var a = 34;
js> f()
34
js> quit()
$ cat echo.js
for (i in arguments) {
  print(arguments[i])
}
$ java org.mozilla.javascript.tools.shell.Main echo.js foo bar
foo
bar
$

spawn and sync

次の例は、spawn で 2 つのスレッドを生成するとともに、sync を使って test 関数の同期化バージョンを作成します。

js> function test(x) {
  print("entry");
  java.lang.Thread.sleep(x*1000);
  print("exit");
}
js> var o = { f : sync(test) };
js> spawn(function() {o.f(5);});
Thread[Thread-0,5,main]
entry
js> spawn(function() {o.f(5);});
Thread[Thread-1,5,main]
js>
exit
entry
exit

runCommand

Linux 環境下での、runCommand 呼び出しの例です。

js> runCommand('date')
Thu Jan 23 16:49:36 CET 2003
0
// input オプションを使用して、プロセスに入力を提供する
js> runCommand("sort", {input: "c\na\nb"})
a
b
c
0
js> // output と err オプションのデモ
js> var opt={input: "c\na\nb", output: 'Sort Output:\n'}
js> runCommand("sort", opt)
0
js> print(opt.output)
Sort Output:
a
b
c
js> var opt={input: "c\na\nb", output: 'Sort Output:\n', err: ''}
js> runCommand("sort", "--bad-arg", opt)
2
js> print(opt.err)
/bin/sort: unrecognized option `--bad-arg'
Try `/bin/sort --help' for more information.

js> runCommand("bad_command", "--bad-arg", opt)
js: "<stdin>", line 18: uncaught JavaScript exception: java.io.IOException: bad_command: not found
js> // システムシェルに、明示的に環境 (environment) を渡す
js> runCommand("sh", "-c", "echo $env1 $env2", { env: {env1: 100, env2: 200}})
100 200
0
js> // args オプションを使い、さらなるコマンド引数を提供する
js> var arg_array = [1, 2, 3, 4];
js> runCommand("echo", { args: arg_array})
1 2 3 4
0

Windows の例も同様に、

js> // シェルコマンドの呼び出し
js> runCommand("cmd", "/C", "date /T")
27.08.2005
0
js> // sort を実行し、結果の出力を収集
js> var opt={input: "c\na\nb", output: 'Sort Output:\n'}
js> runCommand("sort", opt)
0
js> print(opt.output)
Sort Output:
a
b
c
js> // メモ帳の呼び出し。それが終了するまで待ちます。
js> runCommand("notepad")
0
 

ドキュメントのタグと貢献者

タグ: 
 このページの貢献者: ledsun, kohei.yoshino
 最終更新者: ledsun,