首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于停止管道的bash中的Grep R错误消息

用于停止管道的bash中的Grep R错误消息
EN

Stack Overflow用户
提问于 2022-06-01 20:07:18
回答 1查看 58关注 0票数 0

我有一条管道在工作。我有一个wrappper.sh,它将各种.R脚本组合在一起。但是,此管道将通过错误消息运行。我想添加一种方法,grep我们的单词错误,如果真,关闭管道。我知道我需要一个if/ out状态,但是不知道如何在运行在.R中的bash.sh脚本中实现这个信息。参见一个示例错误。

当前脚本:

代码语言:javascript
复制
#!/bin/bash

#Bash script for running GeoMx Pipeline

####
# Install required R packages for pipeline
echo "installing R packages"

Rscript installPackages.R

echo "DONE! R packages installed"

#####
# Created required folders
echo "Creating Folders"

Rscript CreateFolder.R

echo "DONE! Folders created"

####
# Copy data over
cp -u -p Path/Initial\ Dataset.xlsx /PATO_TO

####
# Run Statistical Models

echo "Running Statistical Analysis"

Rscript GLM_EdgeR.R

echo "DONE! Statistical Models completed"

示例错误:

代码语言:javascript
复制
Error in glmLRT(glmfit, coef = coef, contrast = contrast) :
  contrast vector of wrong length, should be equal to number of coefficients in the linear model.
Calls: glmQLFTest -> glmLRT
Execution halted

我想要的:

代码语言:javascript
复制
#!/bin/bash

#Bash script for running GeoMx Pipeline

####
# Install required R packages for pipeline
echo "installing R packages"

Rscript installPackages.R

if grep error == TRUE
then 
   echo "Fatal Error, STOP Pipeline"
   STOP
else 
   echo "DONE! R packages installed"

#####
# Created required folders
echo "Creating Folders"

Rscript CreateFolder.R

if grep error == TRUE
then 
   echo "Fatal Error, STOP Pipeline"
   STOP
else 
   echo "DONE! Folders created"

####
# Copy data over
cp -u -p Path/Initial\ Dataset.xlsx /PATO_TO

####
# Run Statistical Models

echo "Running Statistical Analysis"

Rscript GLM_EdgeR.R

if grep error == TRUE
then 
   echo "Fatal Error, STOP Pipeline"
   STOP
else 
   echo "DONE! Statistical Models completed"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-01 21:02:14

如果您不需要grep来查找错误,您可以测试上一次状态代码是否为非零:

代码语言:javascript
复制
#!/bin/bash

Rscript CreateFolder.R

exit_code=$?
if test $exit_code -ne 0
then
  echo "Fatal Error, STOP Pipeline"
  exit $exit_code
else
  echo "DONE! Folders created"
fi

如果Rscript CreateFolder.R失败,bash脚本将以相同的状态代码退出。

尽管如果您有更多想要检查的条件,但是使用set -e是有意义的。

如果由单个简单命令、列表或复合命令组成的管道返回非零状态,则

立即退出。

https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html

基本上,它会让您的脚本运行到某些东西失败为止:

代码语言:javascript
复制
#!/bin/bash
set -e
Rscript installPackages.R
echo "DONE! R packages installed"
Rscript CreateFolder.R
echo "DONE! Folders created"
Rscript GLM_EdgeR.R
echo "DONE! Statistical Models completed"

对于第二个脚本,CreateFolder.R,失败,它将如下所示:

代码语言:javascript
复制
~/r# ./wrappper.sh
[1] "OK"
DONE! R packages installed
Error: object 'will_fail' not found
Execution halted
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72467469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档