如何获取在 shell 脚本中运行的 R 脚本的退出状态

Posted

技术标签:

【中文标题】如何获取在 shell 脚本中运行的 R 脚本的退出状态【英文标题】:How to get exit status of R script run in shell script 【发布时间】:2017-05-18 18:44:02 【问题描述】:

假设我在这个 shell 脚本中运行一个 Rscript

#!/bin/bash
RES=$(./abc.R 100)
r_status=echo $?

abc.R 中有一些代码停止执行

#!/usr/bin/env Rscript
...
...
if(nrow(status) == 0)
 stop("The list id is not present in requests table. Please check.")  else if (status != 'COMPLETED')
 stop("The list is not in COMPLETED state. Please check.")
...
...

我无法在我的 shell 脚本中捕获 abc.R 的退出状态。它会停止 R 的执行,甚至从 shell 脚本退出到提示符。

有什么方法可以捕获 R 的退出状态。

【问题讨论】:

也许this post 会有所帮助。 脚本的退出状态通常是脚本中执行的最后一条命令的退出状态。我不确定这是否是您需要的。 我认为您的问题是使用r_status=echo $? 而不是r_status=$(echo $?)(或者最好是r_status=$(echo "$?"))。 Demo. 可能是我的问题不清楚。一旦 R 代码中出现错误,它就会停止执行并退出 shell 脚本,而不是执行 shell 脚本的其余行。 【参考方案1】:

只需运行您想要的脚本。 确保它在完成运行时返回正确的退出状态。 这应该有效:

#!/bin/bash
./abc.R 100
if  [ $? == 0 ]; then
  echo "Your script exited with exit status 0"
  exit 0

在此处查看更多信息: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_08_02.html

【讨论】:

R 无法以正确的退出状态返回。它只是停止并退出 shell 执行。

以上是关于如何获取在 shell 脚本中运行的 R 脚本的退出状态的主要内容,如果未能解决你的问题,请参考以下文章

如何在脚本中获取进程ID

如何将shell脚本变为可执行文件

如何对shell脚本进行加密且不影响脚本运行

如何在 Ruby 脚本中为命令 shell 获取环境变量?

如何在shell中执行简单的javascript脚本

shell脚本或R脚本中参数含有空格的处理方法