gpt4 book ai didi

出现错误时的 Ruby/Thor 退出状态

转载 作者:数据小太阳 更新时间:2023-10-29 06:51:37 26 4
gpt4 key购买 nike

我是 Thor(和 Ruby)的新手,我正在考虑在构建脚本中使用它,因为据说它可以替代 Rake(从而替代 Make)。然而,经过短暂的试用,我对它返回的错误状态感到困惑。我快速浏览了 wiki,但没有看到任何提及。

只有第一个“简单示例”,test.thor:

class Test < Thor
desc "example", "an example task"
def example
puts "I'm a thor task!"
end
end

版本号:

eruve>thor version
Thor 0.18.1

我尝试了以下,故意错误的命令:

eruve>ruby --version; thor test:example badarg; echo exit status: $?

ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin10.8.0]
ERROR: thor example was called with arguments ["badarg"]
Usage: "thor test:example".
exit status: 0

因此,出现了一个错误,但它仍然以状态 0 退出...这意味着我宁愿不在(非 ruby​​)脚本中使用它,否则脚本将继续运行,即使它应该终止。后续错误可能难以分析。

我一定是遗漏了什么,因此我的问题是:

  • 有没有一种简单的方法可以在出现错误(配置文件等)时默认获取非零状态?

  • 如果不是,我应该怎么做才能正确处理?

谢谢。

最佳答案

我知道这已经得到回答,但我认为这是一个更好的答案,所以我想我还是会贡献它。

Thor 有一个方法可以用来改变行为,因此错误会导致非零退出代码。它没有很好地记录(恕我直言)。

class Test < Thor
def self.exit_on_failure?
true
end

desc "example", "an example task"
def example
puts "I'm a thor task!"
end
end

这个默认值莫名其妙地是 false。我不知道为什么有人会希望它表现得像那样。 Thor issue 244也解决了这个问题。

更新:从 Thor 1.0.0 开始,您将获得 deprecation warning如果您提供自己的exit_on_failure? 方法。这是为了处理令人困惑的默认行为。

关于出现错误时的 Ruby/Thor 退出状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17241932/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com