防止在按CTRL + C时停止命令


28

因此,我在玩Zork 1时,我复制了一些文本以显示给我的一个朋友,但是我不小心忘记了按CTRL+ 时按住Shift键C。这停止了​​命令,我丢失了Zork数据...

是否存在某种“有用的”提示,可以用来防止在按CTRL+ 键时停止命令C

请注意,Zork在终端内部运行。这是一个基于终端的游戏,您可以在其中发出命令来执行不同的操作。


因此,您想使用Ctrl + c防止完全终止所有应用程序吗?不过,这将来可能是灾难性的。
Jobin 2014年

Answers:


30

组合键Ctrl+ C发送字符^C(字节值3)。这导致终端将SIGINT信号发送到在前台运行的程序¹。该信号的常规操作是中断当前命令:设计为处理连续命令的程序返回其顶级提示,而设计为单批命令或连续交互的程序退出。显然,您使用的程序是根据第二种模型设计的。

该信号发送密钥是内核中通用终端接口的功能,由所有终端仿真器和实际物理终端共享。您可以使用命令配置哪个键发送此信号,以及其他键(最著名的是CtrlZ发送SIGSTOP来挂起前台程序)stty。要将SIGINT的密钥切换为Ctrl+ _(在当前终端中):

stty intr '^_'

完全禁用它:

stty intr ''

要将所有设置重置为默认值:

stty sane

键不能是任意键组合,它必须是一个单字节值。该stty设置可以被程序覆盖-某些程序(尤其是全屏文本模式程序)会执行自己的键盘快捷键处理。

¹ 更确切地说对于以终端为控制终端前台进程组中的所有进程


32

CTRL+ C向前台SIGINT的作业发送一个中断信号(,即信号号2)。您可以通过trap '' 2在启动Zork之前使用命令“捕获”信号来禁用此功能。

重新启用CTRL+ C(untrap SIGINTtrap 2

提示:您可以在您的产品中添加以下内容~/.bashrc

alias zork="(trap '' 2 && cd ~/path/to/zork/ && frotz ZORK1.DAT)"

这样,您将永远不会忘记禁用和重新启用信号,并且只需zork在终端上键入即可更轻松地开始游戏。

注意:如果更方便,可以使用信号名称代替数字,即trap '' siginttrap '' int。我只是习惯使用数字,例如in kill -9等。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.