2012-03-06 176 views
1

我在rake脚本中有两种方法,两种方法都使用system "<SomeCommand>",一种是用文件调用JSLint,这很好。一个是调用YUICompressor,它总是以127错误代码失败。系统命令经常失败并退出代码127

奇怪的是我可以调用Ruby脚本正在运行的EXACT命令,它工作正常,我将它传递给一个文件,并输出一个缩小版本。然而,当我运行它认为Ruby脚本总是炸弹......

它基本上是这样的:

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工作正常,但是调用批处理文件通过绝对路径...

在这onlili上找不到任何信息嗯,有人在上面看到什么奇怪的东西?

只是为了确认所有文件存在于相关位置。

+1

你试过一起'java'绝对路径? – 2012-03-06 17:07:20

+2

用127退出通常意味着“找不到命令”,因此很可能找不到“java”。 – 2012-03-06 19:11:29

+1

尝试比较shell $ PATH(一个来自bash和一个来自ruby脚本),并看看你想出什么。 – Jwosty 2012-03-07 04:42:05

回答

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

即使使用绝对路径和参数作为参数,我也有使用mklink命令的相同问题。

解决方案是使用call命令。

系统( “呼叫 mklink ......”)

+0

mklink是一个函数,因此不可用于Windows命令shell;这就是你的解决方案的原因。 – yaauie 2013-06-22 11:59:32

相关问题