我在rake脚本中有两个方法,两个方法都使用system "<SomeCommand>"
,一个用于调用带有文件的JSLint,工作正常。一个用于调用YUICompressor,它始终失败并返回127错误代码。
奇怪的是我可以调用运行ruby脚本的EXACT命令并且它工作正常,我传递一个文件,它输出一个缩小版本。然而,当我运行它时,它认为红宝石脚本总是炸弹......
它基本上是这样的:
system java -jar c:/dump/tools/yuicompressor-2.7.4.jar c:/dump/src/input_file.js c:/dump/src/output_file.min.js
我知道所有绝对路径看起来都很糟糕但是这就是构建脚本当前如何在绝对路径上工作,但是如果我只是在命令行上调用它,那么该命令工作正常,但是当我通过Rake / Ruby运行它时只是炸弹...但其他系统调用JSLint工作正常,然而通过绝对路径调用批处理文件...
在网上找不到任何关于此的信息,有人在上面看到任何奇怪的内容吗?
只是确认所有文件都存在于相关位置。
答案 0 :(得分:3)
如果其他任何人因为Windows上的同一问题而被驱使,似乎是因为system
无法将命令作为一个大字符串处理,你需要将其分解为参数,所以这就是我如何运作:
# .. in paths is just used as a wildcard here
java_absolute_path = "c:/../java.exe"
yui_compressor_path = "c:/../yuicompressor-2.7.4.jar"
input_file = "c:/dump/src/input_file.js"
output_file = "c:/dump/src/output_file.min.js"
system java_absolute_path, "-jar", yui_compressor_path, input_file, "-o", output_file
以上方法运行正常。
答案 1 :(得分:1)
使用mklink命令时遇到了同样的问题,即使使用绝对路径和参数作为参数。
解决方案是使用call命令。
系统(“致电 mklink ....”)