从bash调用R脚本时退出代码

本·卡尔森

我有一个R脚本,可以从交互式bash外壳(MacOS Catalina)调用。这是我从交互式外壳程序调用的一系列脚本之一,因此我需要知道初始脚本是否失败。看来,无论脚本如何失败(assert_that,stop,stopfinot,quit),R始终返回退出状态0。如何从失败的R脚本返回非零存在状态?

这是一个示例R脚本(fail.r)。

#!/usr/bin/env Rscript

#library(assertthat)

message("Starting script")

#assert_that(FALSE)

#stop('Fail')

#stopifnot(FALSE)

q(save="no", status=10, runLast=FALSE)

message("Should not reach here")

这就是我从bash提示符下调用它的方式

src/poc/fail.r

echo $?

无论我使用哪种方法退出R脚本$?始终返回0。

其他一些帖子解决了这个问题,但似乎不适用于我的情况(如何使Rscript以非交互式bash模式返回状态代码)和(使R以非零状态代码退出

帖木儿

我可以使用将状态从Rscript返回到调用shell(在MacBook Pro上运行的R版本4.0.2,bash版本3.2.57或zsh版本5.8,macOS Mohave 10.14.6)q(status = N)要从失败的R脚本获取非零退出状态q(status = 2),请使用或更高版本,请参见quit

$ Rscript -e 'q(status = 0);'
$ echo $?
0

$ Rscript -e 'q(status = 2);'
$ echo $?
2

$ Rscript -e 'q(status = 10);'
$ echo $?
10

$ R --version
R version 4.0.2 (2020-06-22) -- "Taking Off Again"
Copyright (C) 2020 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin13.4.0 (64-bit)

$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)

$ zsh --version
zsh 5.8 (x86_64-apple-darwin17.7.0)

使用与您发布的脚本基本相同的脚本,我得到了预期的结果(状态从quit成功地传递到了封闭的外壳程序):

脚本:

#!/usr/bin/env Rscript

message("Starting script")
## Use status = 0, 2 or 10:
q(save = "no", status = 2, runLast = FALSE)
message("Should not reach here")

输出(使用上面显示的zsh和bash版本进行测试):

$ ~/test/test1.r
Starting script
$ echo $?       
0
$ ~/test/test1.r
Starting script
$ echo $?       
2
$ ~/test/test1.r
Starting script
$ echo $?       
10

也可以看看:

R本身使用了一些错误状态值。非交互使用的默认错误处理程序有效地调用q(“ no”,1,FALSE)并返回错误状态1。错误状态2用于R'自杀',这是灾难性的失败,并且使用其他小数通过特定端口进行初始化失败。建议用户选择10个或更多状态。

状态的有效值取决于系统,但通常0:255是有效的。

(来自quit文档)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我们如何在python中运行bash脚本时捕获bash脚本的退出代码

来自分类Dev

Bash退出代码状态脚本错误

来自分类Dev

bash脚本末尾的退出代码

来自分类Dev

在bash脚本中从curl获取退出代码

来自分类Dev

当第一个脚本中调用的脚本以错误代码退出时,如何继续运行脚本?

来自分类Dev

Bash脚本在命令失败时退出(sshpass)

来自分类Dev

Bash脚本从NodeJs脚本返回退出代码

来自分类Dev

Bash脚本从NodeJs脚本返回退出代码

来自分类Dev

Bash 脚本在被运行部分调用时工作,作为 cron 作业失败,退出代码为 1

来自分类Dev

从bash脚本调用awk脚本时出错

来自分类Dev

子脚本之一失败时不退出bash脚本

来自分类Dev

退出脚本时杀死bash脚本中的后台进程

来自分类Dev

执行ln -s命令的bash脚本在退出时获得错误代码,但符号链接已成功创建

来自分类Dev

检查bash脚本回显的命令的最后退出代码

来自分类Dev

对话框菜单的bash脚本退出代码

来自分类Dev

Bash:在`-e`脚本中保存命令的退出代码

来自分类Dev

检查bash脚本回显的命令的最后退出代码

来自分类Dev

在bash脚本中将退出代码从0更改为1

来自分类Dev

运行python脚本运行shell文件时退出代码191

来自分类Dev

如果脚本中有退出陷阱的shell错误,则将退出代码传播给调用者

来自分类Dev

从使用$()的bash脚本退出

来自分类Dev

调用GLEW函数时,过程以退出代码-1073741515完成

来自分类Dev

当文件被移动或删除时,bash脚本使“ tail -f”退出

来自分类Dev

使用bash脚本SSH时无法正常退出

来自分类Dev

当调用脚本退出时,用 nohup 调用的脚本有时会死掉

来自分类Dev

由AWK调用并以^ C中断时,使bash退出!= 0

来自分类Dev

当子级退出且退出代码为非零时,父级脚本继续运行

来自分类Dev

发送退出代码而不退出脚本

来自分类Dev

当子进程之一退出时,退出bash脚本

Related 相关文章

  1. 1

    我们如何在python中运行bash脚本时捕获bash脚本的退出代码

  2. 2

    Bash退出代码状态脚本错误

  3. 3

    bash脚本末尾的退出代码

  4. 4

    在bash脚本中从curl获取退出代码

  5. 5

    当第一个脚本中调用的脚本以错误代码退出时,如何继续运行脚本?

  6. 6

    Bash脚本在命令失败时退出(sshpass)

  7. 7

    Bash脚本从NodeJs脚本返回退出代码

  8. 8

    Bash脚本从NodeJs脚本返回退出代码

  9. 9

    Bash 脚本在被运行部分调用时工作,作为 cron 作业失败,退出代码为 1

  10. 10

    从bash脚本调用awk脚本时出错

  11. 11

    子脚本之一失败时不退出bash脚本

  12. 12

    退出脚本时杀死bash脚本中的后台进程

  13. 13

    执行ln -s命令的bash脚本在退出时获得错误代码,但符号链接已成功创建

  14. 14

    检查bash脚本回显的命令的最后退出代码

  15. 15

    对话框菜单的bash脚本退出代码

  16. 16

    Bash:在`-e`脚本中保存命令的退出代码

  17. 17

    检查bash脚本回显的命令的最后退出代码

  18. 18

    在bash脚本中将退出代码从0更改为1

  19. 19

    运行python脚本运行shell文件时退出代码191

  20. 20

    如果脚本中有退出陷阱的shell错误,则将退出代码传播给调用者

  21. 21

    从使用$()的bash脚本退出

  22. 22

    调用GLEW函数时,过程以退出代码-1073741515完成

  23. 23

    当文件被移动或删除时,bash脚本使“ tail -f”退出

  24. 24

    使用bash脚本SSH时无法正常退出

  25. 25

    当调用脚本退出时,用 nohup 调用的脚本有时会死掉

  26. 26

    由AWK调用并以^ C中断时,使bash退出!= 0

  27. 27

    当子级退出且退出代码为非零时,父级脚本继续运行

  28. 28

    发送退出代码而不退出脚本

  29. 29

    当子进程之一退出时,退出bash脚本

热门标签

归档