我似乎时不时会遇到 MacOS 终端(或 iTerm)的奇怪问题,但我无法找出原因。
每当我需要在终端中终止程序时,Control+C都不起作用。终端只会^Z
为每个Control+输出C。
^Z^Z^Z^Z^Z^Z^Z
^Z^Z
^Z^Z^Z
^Z^Z^Z
它不仅限于Control+ C:
- 我得到
^X
了Control+X ^C
对于Control+C- 等等。
这种情况时有发生。有时它能工作,然后就不工作了,然后又能工作了。
我尝试过的:
删除了几乎所有以 开头的键盘快捷键Control。我只留下了以Control+开头的快捷键F。
键盘查看器执行相同操作(即
^Z
)。修饰键是默认键。
尝试在应用程序之间切换以确定应用程序是否可能“劫持”密钥Control,但我无法确定这是否是原因,如果是,那么该应用程序是什么(即 Chrome、TextMate、Notes.app)。
输出
stty -a
:
lflags: icanon isig iexten echo echoe echok echoke -echonl echoctl
-echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
-extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8
-ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
stop = ^S; susp = ^Z; time = 0; werase = ^W;```
答案1
答案2
我能够进一步查明这个问题。
仅当我通过 SSH 进入服务器时才会发生这种情况,并且仅当我先按Ctrl
+Z
中断程序时才会发生这种情况。
如果我先使用Ctrl
+ C
,它就可以工作;如果我先使用Ctrl
+Z
然后再使用Ctrl
+ C
,它就不再工作(整个程序不再获取任何输入)。
我想我就让它保持那样吧。
其他可能对其他人有帮助的发现:
ShortcutDetective 应用程序 [1] 仅当问题发生在本地时才有帮助(即“窃取”您的快捷方式的应用程序)。
有报告称存在与 Bash 版本 [2] 相关
tail
的cat
错误v3.2.48(1)-release
。由于 Catalina 附带了
zsh
,因此我尝试使用最新版本,zsh
而homebrew
不是随 Catalina 安装的版本。% zsh --version zsh 5.7.1 (x86_64-apple-darwin19.0) % brew info zsh zsh: stable 5.8 (bottled), HEAD % brew install zsh [...] ==> Pouring zsh-5.8.catalina.bottle.tar.gz
答案3
这是 macOS 的一个长期存在的问题,令人非常恼火,而且很容易重现:
- 打开一个运行 zsh 的新 Terminal.app 窗口。
- 使用文件打开 vim,例如“vim /etc/passwd”
- 按向下箭头(不是“j” - 向下箭头)移动光标
- 使用 Ctrl-Z 暂停 vim
- 键入 Ctrl-C
它似乎是 zsh(来自 Apple 或 Homebrew,没有区别)和 macOS Terminal.app 的组合 - 其他终端应用程序似乎没问题,而且我已经在新机器上重现了这一点,所以它与第三方应用程序无关。
虽然我还没有找到解决办法,但为了让 Ctrl-C 再次发挥作用后它已经发生了,在终端运行:
trap -
我已经向 Apple 提交了问题。希望如果投诉足够多,问题会得到解决。