5 votos

Salir automáticamente del Terminal al escribir exit

Escenario

Yo uso mucho la terminal para SSH, sin embargo me gustaría que la aplicación de la terminal saliera cuando la última pestaña se cierra usando exit. Ya tengo la ventana de la terminal en sí para cerrar en la salida con éxito, sin embargo Terminal sigue funcionando. He seguido el tutorial de Ricky Campbell aquí que utiliza un AppleScript para salir de la terminal. El AppleScript funciona perfectamente cuando se ejecuta fuera de la Terminal, sin embargo, de alguna manera no puedo conseguir que funcione el comando de la trampa que necesita ser colocado en la terminal.

Para que sirva de referencia, publicaré aquí el texto correspondiente:

Ahora necesitamos una forma de iniciar el script. Esto se puede hacer con el comando bash "trap", haciendo que escuche la señal EXIT. Como quiero que esto ocurra cada vez que mi usuario abra un shell, lo añado a mi archivo .profile. Hago esto con nano:

$ nano ~/.profile

En este archivo añada lo siguiente en alguna parte. Es posible que tenga que editar la ruta del archivo AppleScript que creó anteriormente:

trap '/usr/bin/osascript $HOME/scripts/QuitTerminal.scpt' EXIT

Todo lo que hace es escuchar la señal EXIT dentro de bash y cuando la obtiene, ejecuta el script que creamos antes.

Pregunta

¿Cómo puedo solucionar este problema? Por alguna razón la trampa no se dispara ni funciona como debería, incluso después de numerosos reinicios. ¿Existe una forma alternativa de hacer que la aplicación de terminal se cierre al salir de la última pestaña?

Solución

Los enlaces proporcionados por Dori llevaron a la solución. El artículo sugiere que el comando trap debe estar en .profile cuando en realidad tiene que ser colocado en .bashrc . Moverlo al script correcto arregló el problema.

0 votos

¿Has añadido el comando trap a tu /Users/YourUsername/.profile?

0 votos

@Martin Sí, lo he hecho. Ya lo he confirmado unas cuantas veces.

4voto

Dave Penneys Puntos 3064

El enfoque aquí se da parece un poco más sencillo, ¿quizás te sirva?

Si no quieres acordarte de escribir "quit" en lugar de "exit", y estás usando bash, simplemente añade lo siguiente a tu .bashrc o cualquier otro script:

trap '/usr/bin/osascript -e "tell application \"terminal\" to quit"' 0

¿Qué hace? Cuando el shell recibe la señal 0 (cero), es decir, le dice que salga, ejecutará este comando como lo último que hace. Esto permite que tu shell, etc, salga con gracia, y pedirle a Terminal.app que salga a través de applescript se asegura de que haga lo mismo. En otras palabras, escriba 'exit', y su shell saldrá, y luego Terminal se cerrará, todo limpiamente y de la forma en que la naturaleza lo ha previsto.

El el hilo completo se puede encontrar aquí .

2 votos

Gracias. La solución estaba ahí. Tenía el comando trap en .profile y no en .bashrc. Al moverlo se arregló el problema por completo y ahora funciona como se esperaba.

1 votos

También hay una pestaña en las Preferencias llamada Shell. Si cambias la opción 'When the shell exits:' a 'close if the shell exited cleanly' lo hará sin ningún tipo de scripting.

0 votos

@atroon Creo que ese prefijo se aplica al cierre de una ventana de Terminal, no de toda la aplicación de Terminal.

3voto

TAG Puntos 551

También puede utilizar este comando enrevesado, que no lanza una advertencia sobre la terminación de su propio proceso:

osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit

O bien, puede definir un alias (como quit o exit ) en su perfil:

alias quit='osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit'

2voto

jm666 Puntos 4489

Usted no necesita trap cualquier señal.

Simplemente, ponga el comando osascript en su ~/.bash_logout (crearlo, si no existe)

osascript -e "tell application \"Terminal\" to quit"

El .bash_logout es ejecutado por bash después de cerrar la sesión. Puede introducir cualquier comando de shell en este archivo, cada uno se ejecutará cuando se cierre la sesión.

Por ejemplo, puede abrir una ventana del Finder en la carpeta donde estuvo por última vez, antes de salir, con open . o como...

open .
say "Good bye, my master - leaving terminal now, continue with Finder"
osascript -e "tell application \"Terminal\" to quit"

y así sucesivamente...

1voto

Peter Crabtree Puntos 577

Encuentro esta url para el caso de la Terminal multipestaña. http://cyberdork33.wordpress.com/2010/05/25/make-osx-terminal-quit-when-last-window-closed/
Acabo de probarlo en os x 10.8.2
TL.DR:
para la parte de la pestaña (salir para cerrar la pestaña actual)
Terminal > Preferencias > Configuración > Shell
Cuando la cáscara sale: Cerrar si el shell sale limpiamente (o cerrar la ventana)
Prompt antes del cierre: Nunca(o Sólo si hay procesos distintos al shell de inicio de sesión y: Insertar "osascript")

para la parte de la última pestaña (exit para cerrar esta última pestaña y todo el terminal de Windows y salir de Terminal.app):
1) añadir a ~/.bash_profile :

trap '/usr/bin/osascript $HOME/Scripts/QuitTerminal.scpt' EXIT

2) crear scripts/QuitTerminal.scpt

tell application "Terminal"
    # If there is only one tab remaining, and it contains the word "logout"
    # then this is the final window
    if (count of (tabs of (every window whose visible is true))) = 1 then
        try
            set theContents to words of ((contents of tab 1 of window 1) as Unicode text)
            set exitLastTab to (theContents contains "logout")
        on error
            set exitLastTab to false
        end try

        if exitLastTab is true then
            quit
        end if

    else if (count of (tabs of (every window whose visible is true))) < 1 then
        # If no window remains open, then obviously we can quit the app.
        # This would occur when the final window is closed without 'exit'
        quit
    end if
end tell

Espero que sea de ayuda.

1 votos

Aunque su respuesta puede responder teóricamente a la pregunta, sería preferible incluir las partes esenciales del artículo en una respuesta a continuación, y proporcionar el enlace de referencia

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X