【问题标题】:System command fails constantly with exit code 127系统命令不断失败,退出代码为 127
【发布时间】:2012-03-24 01:49:43
【问题描述】:

我在 rake 脚本中有 2 个方法,这两个方法都使用 system "<SomeCommand>",一个用于使用文件调用 JSLint,效果很好。一种是调用 YUICompressor,它总是失败并返回 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 的另一个系统调用工作正常,但是通过绝对路径调用批处理文件......

在网上找不到任何相关信息,有人看到上面有什么奇怪的地方吗?

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

【问题讨论】:

  • 你试过java的绝对路径吗?
  • 以 127 退出通常意味着“找不到命令”,因此很可能找不到 java
  • 尝试比较 shell $PATH(一个来自 bash,一个来自 ruby​​ 脚本),看看你想出了什么。
  • 我之前尝试过添加java绝对路径,仍然给我127错误,但如果它没有找到它与exe的实际绝对路径,我怀疑路径会改变事情。 $PATH 似乎在 ruby​​ 脚本中也是空的,不确定这意味着什么.. 它也是一个 windows 环境

标签: ruby command-line rake


【解决方案1】:

如果其他人在 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

上述方法效果很好。

【讨论】:

    【解决方案2】:

    我在使用 mklink 命令时遇到了同样的问题,即使使用绝对路径和参数作为参数也是如此。

    解决方法是使用 call 命令。

    system("调用 mklink ....")

    【讨论】:

    • mklink 是一个函数,因此对 windows 命令 shell 不可用;这就是您的解决方案有效的原因。
    猜你喜欢
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    相关资源
    最近更新 更多