![](/img/trans.png)
[英]javascript (spidermonkey) how does one run a linux command from js shell?
[英]passing variables arguments to spidermonkey javascript from shell
我正在使用Spidermonkey javascript引擎从外壳运行javascript,并且大多数功能都根据需要运行。
我希望能够将变量作为参数从命令行传递给javascript,但无法找到实现此目的的方法,即使可能也是如此。
例如,如果我有一个javascript文件(myJs.js),该文件从存储在文件(data.dat)中的某些数据中解析文本,则我目前使用普通语法调用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的自变量而不是变量)。
谢谢
据此: https : //developer.mozilla.org/en-US/docs/SpiderMonkey/Shell_global_objects也可以是scriptArgs。
使用树顶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"]
我认为那是您想要的,是吗?
我终于放弃了,并使用了一种解决方法。我编写了一个简短的(可重复使用的)shell脚本,该脚本充当了终端和Spidermonkey js之间的桥梁。 在终端上,我用要输入到javascript的参数列表调用shell脚本(第一个是要运行的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
https://developer.mozilla.org/zh-CN/docs/SpiderMonkey/Shell_global_objects指定顶层的“ arguments”应将传递给shell的参数忽略所有与shell相关的选项。
我发现这在Mozilla 24分支的某些版本中已被打破,并提交了一个错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.