我正在尝试以 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 条件,如下所示,但尽管sample.r 在其中一个函数中失败,但它再次写回0。
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"
在这里,在样本失败的情况下,我也没有得到预期的“1”。在两个变量的中间步骤中a
and r
。理想情况下,我想要一种捕获错误(如“1”)的方法a
.
有人可以建议如何让 rscript 仅在整个脚本完成且没有任何错误的情况下写入“0”,而在所有其他情况下写入“1”吗?
非常感谢您的投入!谢谢你!
我通过除了回显之外还返回状态代码解决了该问题。下面是从sample.sh 脚本中截取的代码。此外,在sample.R代码中,我添加了trycatch来捕获错误并退出(状态= 1)。
function fun {
if Rscript --verbose --no-restore --no-save /home/R/scripts/sample.r > sample.rout 2>&1
then
echo -e "0"
return 0
else
echo -e "1"
return 1
fi
}
fun
感谢大家的投入。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)