我想运行一个交互式工具,它可以自行退出(当任务完成时)或通过我点击Ctrl+退出C。在此示例中,该工具由 anecho
和 a组成sleep
(因此它不再具有真正的交互性)。
我需要更多的监控,所以我会这样做
echo "$(date) Starting!" | tee -a myLog.log; \
echo "I NEED SOME TIME"; \
sleep 10; \
echo "$(date) Ended!" | tee -a myLog.log
但这仅在我不按Ctrl+时才有效C——当我按 + 时,最后一个 echo 不会被执行。
我可以以某种方式阻止Ctrl+ C“向外”传播到整个过程吗?
sh
在FreeBSD 上工作。
答案1
如果我理解正确的话:
#!/bin/sh
trap catchSigint INT
catchSigint(){
echo
echo "$(date) Interrupted" | tee -a myLog.log
exit 1
}
echo "$(date) Starting!" | tee -a myLog.log
echo "I NEED SOME TIME"
sleep 10
echo "$(date) Ended" | tee -a myLog.log
看到我们正在捕获 SIGINT(由Ctrl+触发C)。如果检测到,则 catchSigint 终止执行,并记录“已中断”。否则,将记录“已结束”。