从shell向spidermonkey javascript传递变量参数

从shell向spidermonkey javascript传递变量参数,javascript,shell,command-line-arguments,spidermonkey,Javascript,Shell,Command Line Arguments,Spidermonkey,我使用spidermonkey javascript引擎从shell运行javascripts,并根据需要完成大部分工作 我希望能够从命令行将变量作为参数传递给javascripts,但是我还没有找到一种方法来实现这一点,或者即使这是可能的 例如,如果我有一个javascript文件(myJs.js),它解析文件(data.dat)中存储的某些数据中的文本,那么我当前使用正常语法调用javascript: js -f myJs.js javascript本身具有从我想要处理的任何文件获取数据

我使用spidermonkey javascript引擎从shell运行javascripts,并根据需要完成大部分工作

我希望能够从命令行将变量作为参数传递给javascripts,但是我还没有找到一种方法来实现这一点,或者即使这是可能的

例如,如果我有一个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”:

这可能根本不可能做到。我可以通过javascript对文件进行批处理,方法是让脚本读取另一个包含文件名列表的文件,但直接从命令行传递文件名要容易得多

我已经广泛地搜索了有关这方面的信息,但有一些混淆,因为您可以将spidermonkey本身的参数传递给javascripts,但我希望以类似于将变量参数传递给bash脚本的方式将变量直接传递给脚本:

: myBashScript <myData1> <myData2>
如果做不到这一点,一个权威性的声明可能会很有用,因为我发现类似的问题在网上讨论,但没有明确的答案(大多数讨论传递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"]

我想这正是你想要的,是吗?

树顶蜘蛛门钥匙:

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

我想这正是你想要的,是吗?

我终于放弃了,使用了一种变通方法。。。我编写了一个简短的(可重用的)shell脚本,它充当终端和spidermonkey js之间的桥梁。从终端,我调用shell脚本,其中包含一系列参数,我希望将这些参数输入到javascript(第一个参数是要运行的javascript文件的名称)。因此,代替(相当于):

(我仍然无法实现)

我用

(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

我终于放弃了,使用了一个变通方法。。。我编写了一个简短的(可重用的)shell脚本,它充当终端和spidermonkey js之间的桥梁。从终端,我调用shell脚本,其中包含一系列参数,我希望将这些参数输入到javascript(第一个参数是要运行的javascript文件的名称)。因此,代替(相当于):

(我仍然无法实现)

我用

(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
指定 顶层的“参数”应该给出传递给shell的参数, 忽略任何与shell相关的选项

不过,我发现Mozilla 24分支的某些版本中出现了这种情况,并提出了一个bug。

顶层的“参数”应该给出传递给shell的参数, 忽略任何与shell相关的选项


不过,我发现Mozilla 24分支上的某些版本中出现了此漏洞,并提出了一个bug。

根据这一点:它也可能是scriptArgs。

根据这一点:它也可能是scriptArgs。

请不要将此标记为as的副本,尽管我确信他也希望这样做,这个问题似乎与我在这里提到的spidermonkey论点相混淆,没有一个令人满意的答案,因此我希望这个问题能够澄清需要什么并解决问题。谢谢。请不要将此标记为as的副本,尽管我确信他也想做同样的事情,但问题似乎与我在这里提到的spidermonkey论点混淆,没有令人满意的答案,因此我希望此问题将澄清需要什么并解决问题。谢谢。如果这能奏效那就太好了,但可惜不行。Mac内置的jsc支持以下参数传递——但spidermonkey不能这样工作,谢谢。我刚刚注意到我的版本是JavaScript-C1.8.5 2011-03-31,所以这可能会有所不同,但您的行会抛出一个错误。现在,如果使用单个分隔符,我可以读取传递的参数字符串(尽管[“a”、“b”、“c”]unevals to:[“[a、b、c]”如果我尝试将其计算到一个数组中,它只有一个成员。至少这是一个进步。我会继续试验。如果这样做会很好,但可惜没有。Mac内置的jsc支持参数传递,但spidermonkey不支持这种方式。谢谢。我刚刚注意到我的版本是JavaScript-C 1.8.5 2011-03-31,所以可能会有所不同,但您的行会抛出一个错误。如果我使用单个分隔符(尽管[“a”、“b”、“c”]unevals to:[“[a、b、c]”),我现在可以读取传递的参数字符串。如果我尝试将其求值到数组,它只有一个成员。至少这是一个进步。我将继续进行实验。