
Intento recibir un mensaje de confirmación cada vez que escribo exit
un comando en el símbolo del sistema. Para hacer esto, intenté usarlo trap
en .bashrc
el archivo pero parece que trap no es una solución ya que de todos modos ejecuta el comando original. ¿Hay alguna manera de que pueda tener esto?
Aquí está mi código de script bashrc que no pudo realizar el trabajo:
function _exit() # Function to run upon exit of shell.
{
read -p "${RED}Are you sure? " REPLY
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo -e "${RED}Bye${NC}"
exit 0
else
#I do not know what to do here to not exit
return
fi
}
trap _exit EXIT
Respuesta1
Si el shell está en modo zsh
o bash
(aunque no en sh
modo), cree exit
una función. Las funciones tienen prioridad sobre las funciones integradas del shell (incluso las especiales como exit
) en zsh
o bash
(aunque no en los shells POSIX). Así que simplemente cambie el nombre de su función exit
y úsela command exit
dentro de la función. De lo contrario, por supuesto, tendrías una recursión infinita.
Respuesta2
La función de sobrecarga exit()
no se ajusta al ^D
escenario. Entonces, hablemos de trap
.
Su else
cláusula debe contener algunas cosas que puedan mantener bash o ignorar la señal de salida. Yo tampoco sé cómo hacer eso.
Pero por ahora, como alternativa, creo que puedes volver a abrir bash.
Si reemplaza su else
cláusula con esta:
echo
history -a
bash
Y luego, si cancela la salida cuando se le solicite, se volverá a abrir un nuevo bash y parecerá como si no hubiera pasado nada, como en el anterior.
Este enfoque tiene un defecto: perderá las asignaciones de variables que escribió antes; es posible que podamos trabajar en eso. Pero si esto te parece bien, esto es todo.
Puede modificar este código para adaptarlo a sus necesidades de todos modos.