这个问题的背景:我目前必须通过 ssh 在终端上完成很多工作,而且我经常使用 screen。因为我习惯使用 ctrl-a 转到行首,所以发现 screen 命令的 ctrl-a 键绑定非常烦人,所以我将其更改为 ctrl-z。唯一的问题是,当我在 Matlab 中时,我认为我在 Screen 中,但实际上不是,按 ctrl-z 会立即终止我的 Matlab 会话,因为 ctrl-z 是 *nix 中暂停进程的键绑定。
所以问题是:我可以删除 shell 中 ctrl-z 的键绑定,以便它不再暂停进程吗?
我的 shell 是 OSX 上的 terminal.app。
答案1
绑定^Z不是在 shell 中配置的,而是在你的终端电话,这是一种伪设备,可让您与物理终端或如今常见的终端仿真程序进行通信。TTY 带有一些设置,可告诉内核如何对设备或仿真器报告的键盘输入做出反应。
使用以下命令更改设置stty
:
stty susp "^P"
stty
接受设置名称及其值;在本例中,设置名称为susp
暂停进程的键,值是组合键,例如^P。输入stty -a
或参考man stty
获取可用设置的列表。
答案2
你可以将你的 matlab 包装在一个名为matlab.sh
如下的脚本中:
#!/bin/sh
trap "" TSTP
/path/to/matlab-executable
这将忽略通常由 Ctrl-Z 发送的 TSTP 信号。
答案3
另一种可能性是为屏幕选择不同的转义字符。
我使用空字符。我的 中有以下内容$HOME/.screenrc
:
escape ^@^@
空字符通常可以输入为Ctrl-Space,这非常容易输入。当然,如果我需要向程序发送一个实际的空字符(例如,它set-mark-command
在 Emacs 中被绑定),我只需输入Ctrl-Space两次。
(当我使用无法发送空字符的设备或终端仿真器时,这有时会导致问题,但这种情况很少见。)
另一种可能性是Ctrl-]:
escape ^]^]
在美国键盘上输入也很容易。(实际上,我在嵌套在主屏幕会话中运行的屏幕会话中使用它,但这可能比您想知道的更多。)我通常遇到的唯一冲突是它是命令的默认转义字符telnet
。