Предотвратить остановку команды при нажатии CTRL+C

Предотвратить остановку команды при нажатии CTRL+C

Итак, я играл в 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может быть переопределена программами — некоторые программы (особенно программы полноэкранного текстового режима) выполняют собственную обработку сочетаний клавиш.

¹ Точнее, ко всем процессам впередний план группа процессовдля которого терминал являетсяуправляющий терминал.

Связанный контент