Итак, я играл в Zork 1 и пошел копировать текст, чтобы показать моего друга, но я случайно забыл удерживать клавишу Shift при нажатии CTRL+ C. Это остановило команду, и я потерял свои данные Zork ...
Есть ли какая-то «полезная» подсказка, которую я могу использовать, чтобы предотвратить остановку команды при нажатии клавиш CTRL+ C?
Обратите внимание, что Zork запускается внутри терминала. Это терминальная игра, в которой вы даете команды для выполнения различных действий.
Ответы:
Комбинация клавиш Ctrl+ Cотправляет символ
^C
(значение байта 3). Это заставляет терминал отправлять сигнал SIGINT программе, работающей на переднем плане¹. Обычным действием для этого сигнала является прерывание текущей команды: программы, предназначенные для обработки последовательных команд, возвращаются к своему приглашению верхнего уровня, тогда как программы, разработанные как одиночная пакетная команда или выход из непрерывного взаимодействия. Очевидно, что используемая вами программа была разработана в соответствии со второй моделью.Этот ключ отправки сигнала является функцией общего интерфейса терминала в ядре, который используется всеми эмуляторами терминала и реальными физическими терминалами. С помощью команды вы можете настроить, какая клавиша отправляет этот сигнал, а также другие клавиши (прежде всего, CtrlZотправка SIGSTOP для приостановки программы переднего плана)
stty
. Чтобы переключить ключ для SIGINT на Ctrl+ _(в текущем терминале):Чтобы отключить его вообще:
Чтобы восстановить все настройки по умолчанию:
Ключ не может быть произвольной комбинацией клавиш, он должен быть однобайтовым значением.
stty
Установка может быть переопределена программами - некоторые программы (особенно полноэкранные программы в текстовом режиме) делать свои собственные обработки клавишей быстрого доступа.¹ Точнее , ко всем процессам в основной группе процессов, для которых терминал является управляющим терминалом .
источник
CTRL+ Cотправляет сигнал прерывания (то
SIGINT
есть сигнал номер 2) на задание на переднем плане. Вы можете отключить это, «перехватывая» сигнал с помощьюtrap '' 2
команды перед запуском Zork.Повторно включить CTRL+ C(убрать
SIGINT
) с помощьюtrap 2
.Совет : вы можете добавить что-то вроде этого в свой
~/.bashrc
:Таким образом, вы никогда не забудете отключить и снова включить сигнал, и вам будет легче начать игру, просто набрав
zork
в терминале.Примечание : вы можете использовать имя сигнала вместо номера, если это более удобно для вас, т . Е.
trap '' sigint
Илиtrap '' int
. Я просто привык к использованию чисел, например, вkill -9
и так далее.источник