我问这个问题。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
如果您回顾一下链接到的原始问题:终止无限循环,您会注意到这种方法甚至也出现在那里。