Препятствуйте тому, чтобы команда остановилась при нажатии CTRL+C

Так, я играл некоторый Zork 1, и я пошел для копирования некоторого текста, чтобы показать моему другу, но я случайно забыл держать клавишу Shift при нажатии CTRL+C. Это остановило команду, и я потерял свои данные Zork...

Есть ли своего рода "полезная" подсказка их, что я могу использовать для предотвращения остановки команды, когда нажимают клавиши CTRL+C?

Обратите внимание, что Zork выполняется в терминале. Это - на терминальном основанная игра, в которой Вы даете команды для выполнения различных действий.

28
задан 14 June 2015 в 21:05

2 ответа

Сочетание клавиш Ctrl + C отправляет символ ^C (значение байта 3). Это заставляет терминал отправлять сигнал SIGINT к программе, работающей в foregroundВ№. Стандартное действие для этого сигнала должно прервать текущую команду: программы, разработанные для обработки последовательных команд, возвращаются к своей подсказке верхнего уровня, в то время как программы разработали как команда единого пакета или непрерывный выход взаимодействия. Очевидно программа, которую Вы используете, была разработана согласно второй модели.

Этот отправляющий сигнал ключ является функцией общего терминального интерфейса в ядре, совместно использованном всеми эмуляторами терминала и реальными физическими терминалами. Можно настроить, какой ключ отправляет этот сигнал, а также другие ключи (прежде всего Ctrl Z отправка SIGSTOP для приостановки приоритетной программы) с stty команда. Переключить ключ для SIGINT к Ctrl + _ (в текущем терминале):

stty intr '^_'

Для отключения его в целом:

stty intr ''

Для сброса всех настроек к значению по умолчанию:

stty sane

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

В№ более точно , ко всем процессам в передний план группа процесса, для которой терминал терминал .

управления
30
ответ дан 23 November 2019 в 00:56

CTRL + C отправляет сигнал прерывания (SIGINT, который является сигналом номер 2) к заданию на переднем плане. Можно отключить это путем "захвата" сигнала с помощью эти trap '' 2 команда прежде, чем запустить Zork.

Повторно включают CTRL + C (непрерывание SIGINT) с trap 2.

Подсказка : Вы могли добавить что-то вроде этого к Вашему ~/.bashrc:

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

Этот способ, которым Вы никогда не будете забывать отключать и повторно включать сигнал и легче запустить игру, просто введя zork в терминале.

Примечание : можно использовать имя сигнала вместо числа, если это более удобно для Вас, т.е. trap '' sigint или trap '' int. Я просто привык к использованию чисел, например, в kill -9 и такой.

32
ответ дан 23 November 2019 в 00:56

Другие вопросы по тегам:

Похожие вопросы: