当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

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

“helpful”是否提供了一些提示,可以在按CTRL + C键时用来阻止停止命令?

请注意,Zork在终端内部运行。这是一个terminal-based游戏,您在其中给出命令来执行不同的操作。

最佳解决思路

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

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

stty intr '^_'

完全禁用它:

stty intr ''

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

stty sane

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

¹More precisely,用于foreground process group中的所有进程,其终端为controlling terminal

次佳解决思路

CTRL + C向前台作业发送中断信号(SIGINT,信号编号​​2)。您可以在启动Zork之前使用trap '' 2命令通过”trapping”禁用该信号。

Re-enable CTRL + C(未捕获SIGINT)与trap 2

提示:您可以在~/.bashrc中添加类似的内容:

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

这样,您将永远不会忘记禁用信号和re-enable,并且只需在终端中键入zork即可轻松开始游戏。

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7484.html,未经允许,请勿转载。