如果另一个程序返回错误,则自动运行程序

paf*_*fcu 3 bash shell scripting exit-code

我有一个程序(抓图),使用网络摄像头拍摄一个人的脸,我也有一个shell脚本包装器,其工作方式如下:

在命令行上,用户为脚本提供要运行的程序的名称及其命令行参数.然后脚本执行给定的命令并检查退出代码.如果出现错误,则运行程序抓取以捕获用户的惊讶面孔.

一切都很好.但问题是必须始终使用包装器脚本.有没有办法在shell中输入命令时自动运行此脚本?或者是否有其他方法可以在任何程序运行后自动运行给定的程序?

优选地,解决方案应该在bash中工作,但是任何其他shell也可以.我意识到这可以通过简单地在shell的源代码中进行一些调整来实现,但这是最后一种措施.

可能更棘手的事情是扩展它以使用在shell外部启动的程序(例如从桌面环境),但这可能太难了.

编辑: Awsome!由于bash很容易,其他贝壳呢?

Mar*_*off 5

在Bash中,只要执行的命令返回非零,就可以使用带有参数的trap命令ERR来执行指定的命令.

$ trap "echo 'there was an error'" ERR
$ touch ./can_touch
$ touch ./asfdsafds/fdsafsdaf/fdsafdsa/fdsafdasfdsa/fdsa
touch: cannot touch `./asfdsafds/fdsafsdaf/fdsafdsa/fdsafdasfdsa/fdsa': No such file or directory
there was an error

trap影响整个会话,所以你需要确保trap在会话开始时通过将其放入.bashrc或调用.profile.