【发布时间】:2019-10-28 13:46:24
【问题描述】:
我正在尝试从以 bash 脚本形式以非交互方式运行的 Rscript 中获取状态代码。此步骤是较大数据处理周期的一部分,其中涉及 db2 脚本。
所以我在脚本 sample.sh 中有以下内容:
Rscript --verbose --no-restore --no-save /home/R/scripts/sample.r >> sample.rout
运行此 sample.sh 时,无论 sample.r 脚本是完全运行还是在中间步骤中出错,它总是返回状态代码 0。
我尝试了以下方法,但没有成功
1 - 在 sample.sh 文件中,我为返回代码添加了一个 if 和 else 条件,如下所示,但它再次写回 0,尽管 sample.r 在其中的一个函数中失败。
if Rscript --verbose --no-restore --no-save /home/R/scripts/sample.r >> sample.rout
then
echo -e "0"
else
echo -e "1"
fi
2 - 我还尝试了一个包装脚本,例如在 sample.wrapper.sh 文件中
r=0
a=$(./sample.sh)
r=$?
echo -e "\n return code of the script is: $a\n"
echo -e "\n The process completed with status: $r"
在这里,如果 sample.r 在变量 a 和 r 的中间步骤中失败,我也没有得到预期的“1”。理想情况下,我想要一种方法来捕获a 中的错误(如“1”)。
有人可以建议如何让 rscript 仅在整个脚本完成且没有任何错误的情况下写入“0”,而在所有其他情况下写入“1”?
非常感谢您的意见!谢谢!
【问题讨论】:
-
你的 Rscript 是什么样的?如果我在具有未知函数/不正确语法的文件上运行 Rscript,我会看到预期的退出代码 1
-
@jenesaisquoi 我的 Rscript 是一个涉及从 db2 数据库获取数据、进行计算以及将数据写回 db2 数据库等的过程。我的问题是,如果该过程在任何步骤中失败,R 将错误写回控制台并在那里结束。但它写入的返回码仍然是“0”。但如果过程中出现任何错误,我希望返回代码为“1”。
-
@StewartMacdonald 我之前已经检查过这篇文章,我不知道如何让它适用于我的用例。
标签: r bash batch-processing rscript non-interactive