Shell
如何防止 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
——當我這樣做時,不會執行最後一個回顯。我可以以某種方式阻止
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 終止執行,記錄“中斷”。否則,將記錄“已結束”。