基于shell脚本中的错误的条件操作

时间:2010-10-22 19:08:35

标签: bash shell

我有一个bash脚本,可以监视上传目录。当它在目录中看到xml文件时。该脚本获取文件并调用使用xslt转换文件的java命令行程序。如果脚本或java命令行程序在处理期间抛出错误,我想将文件mv到不同的目录(错误)。然后给我发错误。

我打算放 exec 2> mail -s'语句错误处理'

在脚本的顶部以捕获stderr的输出。但这似乎并不优雅,也不会移动有问题的文件。

2 个答案:

答案 0 :(得分:5)

您可以在bash中捕获错误条件(任何返回非内联处理的非零条件的语句):

trap func ERR

然后在func(你定义的一个函数)中,你可以做任何你需要清理的事情。

例如:

#!/bin/bash

function foo() {
    echo "cleaning up"
}

trap foo ERR

echo "about to execute false"

false

echo "exiting"

运行它将导致:

./foo.sh
about to execute false
cleaning up
exiting

答案 1 :(得分:3)

这里你需要两件事。首先,确定程序是否失败。这通常由程序的main()函数的返回值所知。如果程序返回任何不同的值,则会出错。

在任何情况下,您要做的第二件事是将标准错误输出捕获到文件以便以后邮寄它。所以:

if ! program inputfile 2> errorfile ; then
    mv inputfile error_directory
    mail -s "error" < errorfile
fi
rm errorfile

但是,您必须检查您的程序是否遵循此约定来发出错误信号。