因此,我正在玩 Zork 1,然后我去复制一些文本给我的朋友看,但我不小心忘记在按CTRL+时按住 Shift 键C。这停止了命令,我丢失了 Zork 数据...
是否有某种“有用的”提示可以帮助我防止按下CTRL+键时停止命令C?
请注意,Zork 在终端内运行。这是一款基于终端的游戏,您可以在其中发出命令来执行不同的操作。
答案1
CTRL+向前台作业C发送中断信号( ,即信号编号 2)。您可以在启动 Zork 之前使用命令“捕获”信号来禁用此功能。SIGINT
trap '' 2
使用重新启用CTRL+ C(解除锁定SIGINT
) trap 2
。
提示:您可以将类似这样的内容添加到您的~/.bashrc
:
alias zork="(trap '' 2 && cd ~/path/to/zork/ && frotz ZORK1.DAT)"
这样,您就永远不会忘记禁用并重新启用信号,并且只需zork
在终端中输入即可更轻松地开始游戏。
笔记:如果方便的话,您可以使用信号名称代替数字,例如trap '' sigint
或trap '' int
。我只是习惯使用数字,例如kill -9
等。
答案2
组合键Ctrl+C发送字符^C
(字节值 3)。这会导致终端发送信号情报向前台运行的程序发出信号¹。此信号的常规操作是中断当前命令:设计用于处理连续命令的程序返回其顶层提示符,而设计为单个批处理命令或连续交互的程序则退出。显然,您使用的程序是根据第二种模型设计的。
此信号发送键是内核中通用终端接口的功能,由所有终端仿真器和真实物理终端共享。您可以配置哪个键发送此信号,以及其他键(最值得注意的是CtrlZ发送停止信号暂停前台程序)stty
命令。要将 SIGINT 的键切换为Ctrl+ _(在当前终端中):
stty intr '^_'
要完全禁用它:
stty intr ''
要将所有设置重置为默认设置:
stty sane
该键不能是任意的组合键,而必须是单字节值。stty
程序可以覆盖该设置 — 某些程序(尤其是全屏文本模式程序)会执行自己的键盘快捷键处理。