如何在命令行中捕获信号?

如何在命令行中捕获信号?

我问这个问题SIGPIPE生成信号以停止执行答案中所述的命令。

但是我如何捕获这个信号并优雅地终止命令呢?该命令退出并显示错误,指出管道损坏。

[错误] [Errno 32] 管道破损

是否显示错误消息

答案1

AFAIK,“捕获”这样的信号的唯一方法是使用该trap命令。您专门设置了一个操作(函数或命令)以在收到特定信号时运行。

例子

#!/bin/bash


cleanup () {
    ...do cleanup tasks & exit...
}

trap "cleanup" SIGPIPE

### MAIN part of script

这种方法可以很容易地用在单行语句中,也可以用在脚本中。被称为 的“函数” cleanup,当SIGPIPE被看到时也可以很容易地成为一个精心设计的单行词。

$ trap "cmd1; cmd2; cmd3;" SIGPIPE

如果您回顾一下链接到的原始问题:终止无限循环,您会注意到这种方法甚至也出现在那里。

相关内容