Evite que el comando se detenga al presionar CTRL + C

28

Entonces, estaba jugando Zork 1 y fui a copiar un texto para mostrarle a un amigo mío, pero accidentalmente olvidé mantener presionada la tecla Mayús al presionar CTRL+ C. Esto detuvo el comando y perdí mis datos de Zork ...

¿Hay algún tipo de consejo "útil" que pueda usar para evitar detener el comando al presionar las teclas CTRL+ C?

Tenga en cuenta que Zork se ejecuta dentro de la terminal. Es un juego basado en terminales en el que das comandos para realizar diferentes acciones.


fuente
Entonces, ¿desea que Ctrl + c evite la finalización de todas las aplicaciones por completo? Sin embargo, eso podría ser desastroso en el futuro.
trabajoen

Respuestas:

30

La combinación de teclas Ctrl+ Cenvía el carácter ^C(valor de byte 3). Esto hace que el terminal envíe la señal SIGINT al programa que se ejecuta en primer plano¹. La acción convencional para esta señal es interrumpir el comando actual: los programas diseñados para procesar comandos sucesivos vuelven a su indicador de nivel superior, mientras que los programas diseñados como un comando por lotes único o una salida de interacción continua. Evidentemente, el programa que está utilizando fue diseñado de acuerdo con el segundo modelo.

Esta clave de envío de señal es una característica de la interfaz de terminal general en el núcleo, compartida por todos los emuladores de terminal y terminales físicos reales. Puede configurar qué tecla envía esta señal, así como otras teclas (especialmente CtrlZenviando SIGSTOP para suspender el programa en primer plano) con el sttycomando. Para cambiar la tecla de SIGINT a Ctrl+ _(en el terminal actual):

stty intr '^_'

Para deshabilitarlo por completo:

stty intr ''

Para restablecer todas las configuraciones a las predeterminadas:

stty sane

La clave no puede ser una combinación de teclas arbitraria, debe ser un solo valor de byte. Los programas sttypueden anular la configuración: algunos programas (especialmente los programas de modo de texto de pantalla completa) realizan su propio procesamiento de atajo de teclado.

¹ Más precisamente , a todos los procesos en el grupo de procesos en primer plano para los cuales el terminal es el terminal de control .

Gilles 'SO- deja de ser malvado'
fuente
32

CTRL+ Cenvía una señal de interrupción ( SIGINTque es la señal número 2) al trabajo en primer plano. Puede deshabilitar esto "atrapando" la señal con el trap '' 2comando antes de iniciar Zork.

Vuelva a habilitar CTRL+ C(descomprimir SIGINT) con trap 2.

Consejo : podría agregar algo como esto a su ~/.bashrc:

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

De esta manera, nunca olvidará deshabilitar y volver a habilitar la señal y es más fácil comenzar el juego simplemente escribiendo zorken el terminal.

Nota : puede usar el nombre de la señal en lugar del número si es más conveniente para usted, es decir, trap '' siginto trap '' int. Estoy acostumbrado a usar los números, por ejemplo, en kill -9y tal.

kraxor
fuente