如何防止Ctrl+C“向外走”?

如何防止Ctrl+C“向外走”?

我想运行一个交互式工具,它可以自行退出(当任务完成时)或通过我点击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 终止执行,并记录“已中断”。否则,将记录“已结束”。

相关内容