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

Tho*_*ent 1 bash shell

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

我打算把exec 2> mail -s'Statement Error Processing'

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

kan*_*aka 5

你可以在bash陷阱错误条件(即返回未办理直列非零条件的任何声明):

trap func ERR
Run Code Online (Sandbox Code Playgroud)

然后在func(您定义的函数)中,您可以执行任何需要清理的操作.

例如:

#!/bin/bash

function foo() {
    echo "cleaning up"
}

trap foo ERR

echo "about to execute false"

false

echo "exiting"
Run Code Online (Sandbox Code Playgroud)

运行将导致:

./foo.sh
about to execute false
cleaning up
exiting
Run Code Online (Sandbox Code Playgroud)