我有一个bash脚本,可以监视上传目录.当它在目录中看到xml文件时.该脚本获取文件并调用使用xslt转换文件的java命令行程序.如果脚本或java命令行程序在处理期间抛出错误,我想将文件mv到不同的目录(错误).然后给我发错误.
我打算把exec 2> mail -s'Statement Error Processing'
在脚本的顶部捕获stderr的输出.但这似乎并不优雅,也不会移动有问题的文件.
你可以在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)