我是否可以在脚本结尾处仅显示bash报告错误?

时间:2014-11-14 16:07:53

标签: bash conditional-statements

我有一个bash脚本,它顺序执行许多任务。 但是,因为我不想看到简单的状态消息(例如yum -y update的长输出),所以我忽略了所有这些消息:

#!/bin/bash
(
 yum -y update
 cd /foo/bar
 cp ~/bar /usr/bin/foo
 ...
 ...
) > /dev/null

这项工作做得很好,但如果出现问题,如cp无法复制某些文件会怎么样?如果发生这种情况,我想在进程继续之前捕获错误并立即退出。

如何退出流程并显示相关错误?一般, 必须使用if / else子句,如下所示:

#!/bin/bash
yum -y update

if [ $? -ne 0 ]; then
    echo "error "
    exit 1
fi

但这种方法的问题在于它会显示过程;因此,我必须在每一行使用> /dev/null;更重要的是,如果我有超过100个要做的事情,那么我将不得不使用许多if / else语句。

有一个方便的解决方案吗?

1 个答案:

答案 0 :(得分:1)

而不是在(...)中使用set -ebash -ec执行命令来执行它们:

bash -ec 'set -e
yum -y update
cd /foo/bar
...
...
cp ~/bar /usr/bin/foo' > /dev/null 2> errlog

或使用set -e

(
set -e
yum -y update
cd /foo/bar
...
...
cp ~/bar /usr/bin/foo
) > /dev/null 2> errlog

-e选项会确保在发生错误时立即退出子shell。