Shell

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

  • June 6, 2020

我想執行一個互動式工具,它可以自行退出(任務完成後)或我點擊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——當我這樣做時,不會執行最後一個回顯。

我可以以某種方式阻止Ctrl+C將“向外”傳播到整個過程嗎?

sh在FreeBSD 上工作。

如果我理解正確:

#!/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 終止執行,記錄“中斷”。否則,將記錄“已結束”。

引用自:https://unix.stackexchange.com/questions/591266