在bash中Grep R错误消息以停止管道



我有一个管道我正在工作。我有一个wrapper .sh,它将各种. r脚本管道在一起。但是,此管道将运行一条错误消息。我想添加一种方法来处理单词Error,如果为True,则关闭管道。我知道我需要一个if/else语句,但不知道如何从运行在bash.sh中的. r脚本中获取此信息。查看错误示例

当前脚本:

#!/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"

错误例子:

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

我想要的:

#!/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"

您不需要grep查找错误,您可以测试last status-code是否非零:

#!/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

基本上它使你的脚本运行,直到出现故障:

#!/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,失败,它看起来像这样:

~/r# ./wrappper.sh
[1] "OK"
DONE! R packages installed
Error: object 'will_fail' not found
Execution halted

最新更新