MacOS 终端:Control+C“被劫持”。当我单击 Control+C 时,终端输出 ^Z

MacOS 终端:Control+C“被劫持”。当我单击 Control+C 时,终端输出 ^Z

我似乎时不时会遇到 MacOS 终端(或 iTerm)的奇怪问题,但我无法找出原因。

每当我需要在终端中终止程序时,Control+C都不起作用。终端只会^Z为每个Control+输出C

^Z^Z^Z^Z^Z^Z^Z
^Z^Z
^Z^Z^Z
^Z^Z^Z

它不仅限于Control+ C

  • 我得到^XControl+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

stty -a您的终端输出是什么?

您正在寻找intr = ^C;

这可能会有帮助:Ctrl-C 和 Ctrl-Z 在终端中不起作用

答案2

我能够进一步查明这个问题。

仅当我通过 SSH 进入服务器时才会发生这种情况,并且仅当我先按Ctrl+Z中断程序时才会发生这种情况。

如果我先使用Ctrl+ C,它就可以工作;如果我先使用Ctrl+Z然后再使用Ctrl+ C,它就不再工作(整个程序不再获取任何输入)。

我想我就让它保持那样吧。

其他可能对其他人有帮助的发现:

  • ShortcutDetective 应用程序 [1] 仅当问题发生在本地时才有帮助(即“窃取”您的快捷方式的应用程序)。

  • 有报告称存在与 Bash 版本 [2] 相关tailcat错误v3.2.48(1)-release

  • 由于 Catalina 附带了zsh,因此我尝试使用最新版本,zshhomebrew不是随 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 的一个长期存在的问题,令人非常恼火,而且很容易重现:

  1. 打开一个运行 zsh 的新 Terminal.app 窗口。
  2. 使用文件打开 vim,例如“vim /etc/passwd”
  3. 按向下箭头(不是“j” - 向下箭头)移动光标
  4. 使用 Ctrl-Z 暂停 vim
  5. 键入 Ctrl-C

它似乎是 zsh(来自 Apple 或 Homebrew,没有区别)和 macOS Terminal.app 的组合 - 其他终端应用程序似乎没问题,而且我已经在新机器上重现了这一点,所以它与第三方应用程序无关。

虽然我还没有找到解决办法,但为了让 Ctrl-C 再次发挥作用它已经发生了,在终端运行:

trap -

我已经向 Apple 提交了问题。希望如果投诉足够多,问题会得到解决。

相关内容