Traté de tener un programa interactivo en un script bash:
my_program
Y deseo poder cerrarlo con 'Ctrl + c'. Pero cuando lo hago, mi guión también se está cerrando.
Se acerca de.
trap '' 2
my_program
trap 2
Pero en este caso, simplemente no puedo cerrar my_program
con Ctrl + c.
¿Tienes alguna idea de cómo permitir Ctrl + c en un programa, pero no cerrar el script que lo ejecuta?
EDITAR: agregar ejemplo
#!/bin/bash
my_program
my_program2
Si uso Ctrl + c para cerrar my_program
, my_program2
nunca se ejecuta porque se sale de todo el script.
tail
s en lugar de matar gatos la próxima vez?Puede restablecer una trampa a su valor predeterminado dando el comando de trampa
-
como argumento de acción. Si hace esto en un subshell , no afectará la trampa en el shell principal. En su script, puede hacer esto para cada comando que necesita ser interrumpible con Ctrl-C:fuente
exec my_program
en la subshell, para ser un poco más eficiente.Cuando usa Crtl+ C, interrumpe el programa ("lo mata ").
Lo que probablemente esté buscando es suspender su programa (" pausarlo "). Para esto, puedes usar Crtl+ Z.
Una vez que su programa está en pausa, puede verlo usando
jobs
. Por ejemplo:[1]+ Stopped ./foobar
Aquí solo tengo un trabajo, el trabajo n. ° 1, pero puede haber más de uno: cada trabajo tiene su propio número.
Puede controlar su proceso suspendido utilizando una serie de comandos, por ejemplo
bg
,fg
ykill
.bg %1
reiniciará trabajo # 1 en el b ack g rondafg %1
reinicio voluntad trabajo # 1 en el f mineralg roundkill %1
matará el trabajo # 1Tenga en cuenta que puede usar
bg
yfg
sin argumentos si solo tiene un trabajo activo.fuente