Могу ли я удалить привязку ctrl-z в моей оболочке?

3

Предпосылки для этого вопроса: в настоящее время мне приходится выполнять большую часть своей работы в терминале через ssh, и я довольно часто использую экран. Поскольку привязка клавиш ctrl-a для экранных команд меня раздражает, так как я привык использовать ctrl-a для перехода к началу строки, я изменил ее на ctrl-z. Единственная проблема с этим состоит в том, что когда я нахожусь в Matlab, думаю, что я нахожусь в Screen, но это не так, нажатие ctrl-z мгновенно завершит мой сеанс Matlab, потому что ctrl-z - это связывание ключей для приостановки процессов в * nix.

Поэтому возникает вопрос: могу ли я удалить привязку клавиш для ctrl-z в моей оболочке, чтобы она больше не приостанавливала процесс?

Моя оболочка является Terminal.app на OSX.

Nagel
источник
7
Ctrl-Z действительно убивает Matlab? Способ приостановки работает так: вы возвращаете приглашение оболочки (по крайней мере, из командной строки). Если вы закончили приостановку, вы можете продолжить приостановленную программу fg(поместите ее снова на передний план).
Дженс
Спасибо, Йенс! Вы абсолютно правы. Я думал, что это было убито, так как я не видел Матлаба сверху, но fg возвращает его. Это решает мою проблему :)
Нагель

Ответы:

10

^ZСвязывания не настроен в оболочке, но в вашем TTY , псевдо-устройство , которое позволяет говорить с физическим терминалом , или, как это обычно бывает в наше время, в программу - эмулятор терминала. TTY содержит настройки, которые сообщают ядру, как реагировать на ввод с клавиатуры, сообщаемый устройством или эмулятором.

Настройки изменяются с помощью sttyкоманды:

stty susp "^P"

sttyпринимает имя настройки и ее значение; в этом случае имя параметра suspдля ключа, который приостанавливает процесс, а значение представляет собой комбинацию клавиш, например ^P. Введите stty -aили обратитесь к man sttyсписку доступных настроек.

user4815162342
источник
2

Вы можете обернуть ваш matlab в скрипт, названный matlab.shтак:

#!/bin/sh
trap "" TSTP
/path/to/matlab-executable

Это будет игнорировать сигнал TSTP, обычно отправляемый Ctrl-Z.

exic
источник
2

Другая возможность состоит в том, чтобы выбрать другой экранирующий символ для экрана.

Я использую нулевой символ. У меня есть следующее в моем $HOME/.screenrc:

escape ^@^@

Нулевой символ (обычно) можно ввести как Ctrl-Space, что очень легко набрать. И, конечно, если мне нужно отправить в программу фактический нулевой символ (например, он связан с set-mark-commandEmacs), я просто набираю Ctrl-Spaceдважды.

(Это иногда вызывает проблемы, когда я использую устройство или эмулятор терминала, который не может отправить нулевой символ, но это редко.)

Другая возможность Ctrl-]:

escape ^]^]

который также легко набирать на клавиатуре США. (Я на самом деле использую это в сеансе экрана, который запускается внутри моего основного сеанса экрана, но это, вероятно, больше, чем вы хотите знать.) Единственный конфликт, с которым я обычно сталкиваюсь, это то, что это управляющий символ по умолчанию для telnetкоманды.

Кит Томпсон
источник
Спасибо за ваш ответ. Я использую ctrl-space для чего-то еще, и] не так легко получить доступ к моей скандинавской клавиатуре.
Нагель