【发布时间】:2018-01-23 19:04:15
【问题描述】:
我正在使用 Ruby 通过以下方式调用 shell 脚本:
%x[ /root/script.sh -k -m -l -w -p]
exitCode = %x[echo $?]
if exitCode != 0
do something
else
do something else
end
我的问题是即使我强制脚本失败,退出代码也始终等于 0。如何正确获取脚本的退出码?
编辑: 好的,今天早上进来并开始挖掘脚本,因为我无法得到除 0 之外的任何错误代码。脚本看起来像这样......
failed() {
if [ "$1" -ne 0 ] ; then
echo "$2 failed. INSTALLATION FAILED! Exiting.";
exit 1;
fi
}
{
function 1
function 2..
function ..20
} | tee -a logFile.log
所以脚本运行的最后一件事总是这个日志文件,这意味着我永远不会得到真正的退出代码。
【问题讨论】:
-
相关:Calling shell commands from Ruby。你可以做
exitCode = $?.exitstatus -
我刚试过,我得到了一个 TypeError 没有将 Integer 隐式转换为 String。所以我尝试做 exitCode = $?.exitstatus.to_i 我仍然收到同样的错误
-
有趣。
ruby -e '%x[/root/script.sh -k -m -l -w -p]; exitCode=$?.exitstatus; print exitCode'也会失败吗? -
你们两个走错了路。使用反引号,OP 的当前代码包含一个字符串(可能是
0),而不是一个整数退出状态。在上面调用#class 看看。 -
哦,我的本意是建议删除
exitCode = %x[echo $?],添加exitCode = $?.exitstatus。
标签: ruby linux shell exit-code