从shell传递变量参数到spidermonkey javascript

x33g5p2x  于 2022-12-23  发布在  Shell
关注(0)|答案(4)|浏览(123)

我正在使用spidermonkey javascript引擎从shell运行javascript,大部分东西都能按需工作。
我希望能够从命令行将变量作为参数传递给javascript,但一直未能找到这样做的方法,或者即使这是可能的。
举个例子,如果我有一个javascript文件(myJs.js),它从存储在文件(data.dat)中的一些数据中解析文本,那么我现在用普通语法调用javascript:

js -f  myJs.js

javascript本身有一些命令,可以从我想处理的任何文件中获取数据,就像这样:

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

这很好用,但是如果我想为不同的数据文件重用javascript,每次我想为新数据运行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

如果做不到这一点,一个权威的声明可能会有用,因为我发现类似的问题在网上讨论,没有明确的答案(大多数讨论传递蜘蛛猴自己的参数,而不是变量)。
谢啦,谢啦

fxnxkyjh

fxnxkyjh1#

根据这个Shell global objects来自MDN的页面

它也可以是scriptArgs

yptwkmov

yptwkmov2#

使用树顶蜘蛛猴:

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

我想这就是你想要的,对吧?

uemypmqf

uemypmqf3#

我最终放弃了,并使用了一个变通方法......我写了一个简短的(可重用的)shell脚本,作为终端和spidermonkey js之间的桥梁。从终端,我用一个参数列表调用shell脚本,我希望将这些参数提供给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
aor9mmx1

aor9mmx14#

https://developer.mozilla.org/en-US/docs/SpiderMonkey/Shell_global_objects指定顶层的“arguments”应该给予传递给shell的参数,忽略任何与shell相关的选项。
不过,我发现Mozilla 24分支的某些版本中出现了此问题,并提交了一个bug。

相关问题