Less
為什麼不能用抄送退出ed?
該程序
ed
是一個最小的文本編輯器,不能通過使用Ctrl
-發送中斷來退出C
,而是列印錯誤消息“?” 到控制台。ed
為什麼在收到中斷時不直接退出?當然,這裡沒有任何理由說明神秘的錯誤消息比退出更有用。這種行為會導致許多新使用者進行以下類型的互動:$ ed hello ? help ? exit ? quit ? ^C ? ^C ? ? ? ^D $ su # rm -f /bin/ed
如此悲慘的浪費——
ed
只要同意被打斷,就很容易避免。另一個表現出類似行為的頑固程序
less
似乎也沒有太多理由忽略C-c
。為什麼這些程序不只是提示?
Ctrl
+C
發送SIGINT。SIGINT 的正常操作是返回程序的頂層循環,取消目前命令並進入程序等待下一個命令的模式。只有非互動式程序應該死於 SIGINT。所以很自然
Ctrl
+C
不會殺死 ed,而是讓它返回到它的頂層循環。Ctrl
+C
中止目前輸入行並返回到 ed 提示符。less 也是如此:
Ctrl
+C
中斷目前命令並帶您返回其命令提示符。由於歷史原因, ed 忽略了SIGQUIT (
Ctrl
+\
)。普通應用程序不應擷取此信號並允許自己終止,如果啟用,則使用核心轉儲。