0

Spidermonkey JavaScript エンジンを使用してシェルから JavaScript を実行しており、ほとんどの機能が必要に応じて機能しています。

コマンドラインから変数を引数としてjavascriptに渡すことができるようにしたいのですが、これを行う方法を見つけることができませんでした。

例として、ファイル (data.dat) に保存されているデータからテキストを解析する JavaScript ファイル (myJs.js) がある場合、現在、通常の構文で JavaScript を呼び出します。

js -f  myJs.js

JavaScript自体には、次のように、処理したいファイルからデータを取得するコマンドがあります。

var fileData = read("data.dat");

これは問題なく動作しますが、別のデータ ファイルに対して JavaScript を再利用したい場合は、新しいデータに対して実行するたびに JavaScript のファイル名を編集する必要があります。

私の質問は、ファイル名(または他の変数)をコマンドラインからjavascriptに渡し、javascript内から引数として取得する方法はありますか?

js -f  myJs.js -- "othertData.dat"

ここで、javascript は値「otherData.dat」にアクセスできます。

var fileData = commandLine.argument[0];
// (I know commandLine is not an object and argument not a property, just illustrating what I want to do!);

これを行うことは単に不可能な場合があります。スクリプトにファイル名のリストを含む別のファイルを読み取らせることで、javascript を介してファイルをバッチ処理できますが、コマンド ラインからファイル名を直接渡す方がはるかに簡単です。

これに関する情報を広範囲に検索しましたが、spidermonkey 自体の引数を JavaScript に渡すことができるため、多少の混乱がありますが、変数の引数を bash スクリプトに渡すのと同様の方法で、変数をスクリプトに直接渡したいと考えています。

: myBashScript <myData1> <myData2>

可変引数は、番号付き引数配列に取得されます。

firstArgument=$1

これができない場合は、明確な回答なしにウェブ全体で議論されている同様の質問を見つけたので、その効果に対する権威ある声明が役立つかもしれません (ほとんどの場合、変数ではなく Spidermonkey 独自の引数を渡すことについて議論しています)。

ありがとう

4

4 に答える 4

2

これによると: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Shell_global_objectsまた、scriptArgs である可能性があります。

于 2014-02-21T23:44:25.043 に答える
1

ツリーの最上位の SpiderMonkey を使用する場合:

$ ./js --help
[snip]
Version: JavaScript-C24.0a1
[snip]
$ cat myscript.js 
print(uneval(arguments));
$ ./js -f myscript.js -- foo bar baz
["foo", "bar", "baz"]

それはあなたが望むことだと思いますよね?

于 2013-06-19T02:12:29.533 に答える
0

私は最終的にあきらめて回避策を使用しました...ターミナルとspidermonkey jsの間のブリッジとして機能する短い(再利用可能な)シェルスクリプトを作成しました。ターミナルから、javascript に渡す引数のリストを使用してシェル スクリプトを呼び出します (最初の引数は、実行する javascript ファイルの名前です)。その代わりに(と同等):

js -f myscript - arg1 arg2 arg3

(私はまだ達成できていません)

私が使う

javascript myscript arg1 arg2 arg3

(javascript は私のブリッジ スクリプトの名前です)。それだけです、それはうまくいきます。

ブリッジ スクリプトは単に引数を読み取り、javascript 配列割り当てとしてフォーマットされた一時ファイルにそれらを書き込み、.js スクリプトを一時ファイルに追加して実行します。

# create jscode file a write js to declare an array to hold arguments
echo "var args = new Array();" > jscode

# write assignments to each array index to jscode file
# counter initialised to -1 to allow first argument (filename) to be skipped
i=-1
for TOKEN in $*
do
if [ if $i != -1 ]
  then
  echo "args[$i] = \"$TOKEN\";" >> jscode
fi
i=$((i+1))
done

# append script file (first arg is file name) to jscode file
cat $1 >> jscode
#run jscode using spidermonkey
jsc -f jscode

したがって、引数「hello」「world」を greeting.js という javascript に送信する場合は、端末から次を使用します。

javascript greeting.js hello world

作成された一時 jscode ファイルが開始されます。

var args = new Array();
arg[0] = "hello";
arg[1] = "world";
// contents of greeting.js appended here
于 2013-06-25T09:09:20.277 に答える
0

https://developer.mozilla.org/en-US/docs/SpiderMonkey/Shell_global_objectsは、シェル関連のオプションを無視して、トップレベルの「引数」がシェルに渡される引数を与える必要があることを指定します。

ただし、これは Mozilla 24 ブランチのいくつかのバージョンで壊れていることがわかり、バグを報告しました。

于 2013-09-17T20:47:58.617 に答える