r - 如何让 Rscript 在非交互式 bash 模式下返回状态码
问题描述
我正在尝试以 bash 脚本的形式以非交互式方式从运行的 Rscript 中获取状态代码。此步骤是较大数据处理周期的一部分,其中涉及 db2 脚本等。
所以我在脚本sample.sh中有以下内容:
Rscript --verbose --no-restore --no-save /home/R/scripts/sample.r >> sample.rout
运行此 sample.sh 时,它始终返回状态代码 0,无论 sample.r 脚本是完全运行还是在中间步骤中出错。
我尝试了以下事情,但没有运气
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
. 理想情况下,我想要一种在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
感谢大家的投入。
推荐阅读
- r - 在 QQplot 中为模型画线
- java - 如何通过 Log4j2 将日志发送到 Graylog?
- datetime - .Net Core 3.1 Web Api 的自定义 OData 日期时间序列化器
- python - 读取模板 JSON 文件并在 bash 或 Python 中使用替换创建新文件
- c# - WPF C# Mouse Down 事件以编程方式在 void
- r - 在 R 中有效地采样彩票号码
- python - 比较不需要模式匹配的 2 个列表
- html - 我的网站在本地托管时使用 flex 和 bootstrap 进行响应。它现在是在线托管的,flex 不能在移动网站上运行
- python - 如何在 BeautifulSoup 对象中搜索字符串?
- angularjs - Webpack + Karma + Angular 1 TypeError:模块不是函数