
Итак, я играл в Zork 1 и решил скопировать текст, чтобы показать его другу, но случайно забыл удерживать клавишу Shift при нажатии CTRL+ C. Это остановило команду, и я потерял свои данные Zork...
Есть ли какой-то «полезный» совет, который я могу использовать, чтобы предотвратить остановку команды при нажатии клавиш CTRL+ C?
Обратите внимание, что Zork запускается внутри терминала. Это игра на основе терминала, в которой вы даете команды для выполнения различных действий.
решение1
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
и т.п.
решение2
Комбинация клавиш Ctrl+ Cотправляет символ^C
(байтовое значение 3). Это заставляет терминал отправитьSIGINTсигнал программе, работающей на переднем плане¹. Обычным действием этого сигнала является прерывание текущей команды: программы, предназначенные для обработки последовательных команд, возвращаются к своему приглашению верхнего уровня, в то время как программы, предназначенные для выполнения одной пакетной команды или непрерывного взаимодействия, завершаются. Очевидно, используемая вами программа была разработана в соответствии со второй моделью.
Эта клавиша отправки сигнала является функцией общего интерфейса терминала в ядре, используемой всеми эмуляторами терминала и реальными физическими терминалами. Вы можете настроить, какая клавиша отправляет этот сигнал, а также другие клавиши (в частности,CtrlZ отправляющиеСИГНАЛ СТОПдля приостановки программы переднего плана) с помощьюstty
команда. Чтобы переключить клавишу SIGINT на Ctrl+ _(в текущем терминале):
stty intr '^_'
Чтобы полностью отключить его:
stty intr ''
Чтобы сбросить все настройки до значений по умолчанию:
stty sane
Ключ не может быть произвольной комбинацией клавиш, он должен быть однобайтовым значением. Настройка stty
может быть переопределена программами — некоторые программы (особенно программы полноэкранного текстового режима) выполняют собственную обработку сочетаний клавиш.
¹ Точнее, ко всем процессам впередний план группа процессовдля которого терминал являетсяуправляющий терминал.