it-swarm.cn

如何用信号通知标准输入结束

  1. 在Bash中,我了解到可以通过here文档更改结束信号。但是默认情况下,我如何发信号通知标准输入结束?
  2. 我偶然发现,使用cat和chardet时,可以通过Ctrl + d将其stdin输入表示为完成。但是我似乎记得Ctrl + d和Ctrl + c与结束正在运行的命令的执行类似。那我错了吗?
84
Tim

Ctrl+D在终端上的行首键入时,表示输入的结尾。从Unix的角度来看,这不是 signal :当应用程序正在从终端读取并且用户按下时 Ctrl+D,则通知应用程序已到达文件末尾(就像它正在从文件中读取并已通过最后一个字节一样)。

Ctrl+C 确实发送了信号 [〜#〜] sigint [〜#〜] 。默认情况下,SIGINT(中断信号)会杀死前台应用程序,但是该应用程序可以捕获信号并以某种不同的方式做出反应(例如,Shell本身捕获信号并中止您已开始键入的行,但不会) t退出时,它会显示一个新的提示并等待新的命令行。

您可以使用 stty 命令更改与文件结尾和SIGINT相关的字符,例如stty eof a会使a文件结尾字符,而stty intr ^-将禁用SIGINT字符。这很少有用。

119

您的第二点将两个完全不同的东西放在一起。

  • Ctrl + C向运行的进程发送终止信号。
  • Ctrl + D发送 传输结束 字符。

您正在寻找后者。

23
Caleb