Less

為什麼不能用抄送退出ed?

  • June 9, 2020

該程序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+ \)。普通應用程序不應擷取此信號並允許自己終止,如果啟用,則使用核心轉儲。

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