所以,我正在玩一些 Zork 1,我去复制一些文本给我的一个朋友看,但我不小心在按CTRL+时忘记按住 shift 键C。这停止了命令,我丢失了我的 Zork 数据......
是否有某种“有用的”提示可以用来防止在按CTRL+键时停止命令C?
请注意,Zork 在终端内运行。这是一个基于终端的游戏,您可以在其中发出命令来执行不同的操作。
kra*_*xor 32
CTRL+C向前台SIGINT
的作业发送中断信号(,这是信号编号 2)。您可以通过trap '' 2
在启动 Zork 之前使用命令“捕获”信号来禁用此功能。
重新启用CTRL+ C(untrap SIGINT
) trap 2
。
提示:您可以将这样的内容添加到您的~/.bashrc
:
alias zork="(trap '' 2 && cd ~/path/to/zork/ && frotz ZORK1.DAT)"
Run Code Online (Sandbox Code Playgroud)
这样您就永远不会忘记禁用和重新启用信号,只需zork
在终端中输入即可更轻松地开始游戏。
注意:如果您更方便,您可以使用信号名称而不是数字,即trap '' sigint
或trap '' int
。我只是习惯使用数字,例如 inkill -9
等。
Gil*_*il' 30
组合键Ctrl+C发送字符^C
(字节值 3)。这会导致终端将SIGINT信号发送到在前台运行的程序¹。此信号的常规操作是中断当前命令:设计用于处理连续命令的程序返回其顶级提示符,而设计为单个批处理命令或连续交互的程序退出。显然,您使用的程序是根据第二种模型设计的。
这个发送信号的密钥是内核中通用终端接口的一个特性,为所有终端仿真器和真实物理终端共享。您可以使用命令配置哪个键发送此信号,以及其他键(最显着的是CtrlZ发送SIGSTOP以挂起前台程序)stty
。要将 SIGINT 的键切换为Ctrl+ _(在当前终端中):
stty intr '^_'
Run Code Online (Sandbox Code Playgroud)
要完全禁用它:
stty intr ''
Run Code Online (Sandbox Code Playgroud)
要将所有设置重置为默认值:
stty sane
Run Code Online (Sandbox Code Playgroud)
键不能是任意键组合,它必须是单字节值。该stty
设置可以被程序覆盖——某些程序(尤其是全屏文本模式程序)会执行自己的键盘快捷键处理。
¹更准确地说,是针对前台进程组中以终端为控制终端的所有进程。