Terminal: ¿cómo reiniciar la sesión después de salir inadvertidamente?

19

A veces salgo inadvertidamente de una sesión de Terminal (generalmente porque creo que estoy conectado a un sistema remoto, cuando no lo estoy), por lo que llego a este punto:

¿Cómo puedo reiniciar la sesión en este momento? No quiero cerrar la ventana o la pestaña porque tengo un montón de pestañas configuradas para mi flujo de trabajo normal, así que solo quiero que la sesión en la pestaña actual vuelva a funcionar (es decir, volver al indicador de bash).

La única solución que he encontrado hasta ahora es salir de Terminal por completo y volver a abrirlo, pero eso dista mucho de ser ideal, ya que obviamente interrumpe cualquier otra cosa que esté haciendo en otras ventanas / pestañas de Terminal.

    
pregunta Paul R 17.12.2015 - 16:02

2 respuestas

20

En este punto, no hay forma de recuperar la pestaña. La sesión de terminal está cerrada y ya no tiene un TTY. Simplemente no hay manera de hacer referencia a la pestaña para hacer algo inteligente. Le sugeriría agregar esta función a su .bashrc o .profile para que no tenga el problema en el futuro:

exit() {
    read -t5 -n1 -p "Do you really wish to exit? [yN] " should_exit || should_exit=y
    case $should_exit in
        [Yy] ) builtin exit $1 ;;
        * ) printf "\n" ;;
    esac
}

o, para aquellos de nosotros que usamos el shell Z (agréguelo a su .zshrc):

exit() {
    if read -t5 -q should_exit\?"Do you really wish to exit? [yN] "; then
        builtin exit $1
    fi
}

¡Es una pequeña y agradable barrera entre tú y ese molesto comando de salida! Dios sabe que he hecho lo mismo muchas veces en el pasado.

    
respondido por el William T Froggard 17.12.2015 - 16:50
1

El guión de William T Froggard no hizo lo que necesitaba, porque generalmente la única forma de entrar en esta situación es a través de ^ D ( ctrl + D ), y redefiniendo exit no hizo nada por esa situación. Para mí, la sugerencia de Dennis Williamson de establecer IGNOREEOF fue suficiente. Acabo de añadir:

# Do not exti on a single ^D, require 2 in a row
IGNOREEOF=1

a mi archivo ~/.bashrc y ahora (si estoy en el shell de nivel superior y saldría del terminal), la primera ^ D genera la respuesta:

Use "logout" to leave the shell.

Si escribo ^ D de nuevo inmediatamente, el shell se cierra, por lo que salir cuando quiero es todavía fácil, pero ahora solo ^ D me dará una advertencia. (Si lo desea, puede establecer IGNOREEOF en un número más alto para requerir ^ D adicionales consecutivos).

También es útil, si estoy en un sub-shell, la primera ^ D genera la respuesta:

Use "exit" to leave the shell.

Una vez más, una ^ D adicional me sacará, y ahora puedo distinguir la diferencia entre salir de una sub-shell y salir de la shell de nivel superior.

    
respondido por el Old Pro 09.09.2018 - 22:56

Lea otras preguntas en las etiquetas