防止按 CTRL+C 时命令停止

防止按 CTRL+C 时命令停止

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

是否有某种“有用的”提示可以帮助我防止按下CTRL+键时停止命令C

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

答案1

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

使用重新启用CTRL+ C(解除锁定SIGINT) trap 2

提示:您可以将类似这样的内容添加到您的~/.bashrc

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

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

笔记:如果方便的话,您可以使用信号名称代替数字,例如trap '' siginttrap '' int。我只是习惯使用数字,例如kill -9等。

答案2

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

此信号发送键是内核中通用终端接口的功能,由所有终端仿真器和真实物理终端共享。您可以配置哪个键发送此信号,以及其他键(最值得注意的是CtrlZ发送停止信号暂停前台程序)stty命令。要将 SIGINT 的键切换为Ctrl+ _(在当前终端中):

stty intr '^_'

要完全禁用它:

stty intr ''

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

stty sane

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

¹ 更确切地说,到所有进程前景 进程组终端是控制终端

相关内容