我写了一个小的 Bash 脚本来查找所有包含参数中传递的字符串的 Mercurial 变更集(从提示开始):
#!/bin/bash
CNT=$(hg tip | awk '{ print $2 }' | head -c 3)
while [ $CNT -gt 0 ]
do
echo rev $CNT
hg log -v -r$CNT | grep $1
let CNT=CNT-1
done
如果我通过按 ctrl-c 来中断它,则当前执行的命令通常是“hg log”,并且正是该命令被中断,但随后我的脚本继续执行。
当时我正在考虑检查“hg log”的返回状态,但是因为我正在将它传送到 grep 中,所以我不太确定如何去做......
当它被中断时,我应该如何退出这个脚本? (顺便说一句,我不知道该脚本是否适合我想做的事情,但它完成了工作,而且我对“中断”问题很感兴趣)
最佳答案
放置在脚本的开头:trap 'echo interrupted;退出' INT
编辑:如以下评论所述,由于管道的原因,可能不适用于 OP 的程序。 $PIPESTATUS
解决方案有效,但将脚本设置为在管道中的任何程序以错误状态退出时退出可能更简单:set -e -o pipefail
关于Bash:有 CTRL-C 时如何中断此脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2551614/