Salir automáticamente de Terminal al escribir exit

5

Escenario

Utilizo mucho la terminal para SSH, sin embargo, me gustaría que la aplicación de la Terminal se cierre cuando la última pestaña se cierre con exit. Ya tengo la ventana del terminal configurada para cerrarse en una salida exitosa, sin embargo, el Terminal sigue funcionando. Seguí el tutorial de Ricky Campbell aquí que utiliza un AppleScript para salir del terminal . El AppleScript funciona perfectamente cuando se ejecuta fuera de la Terminal, sin embargo, de alguna manera no puedo hacer que funcione el comando de captura que debe colocarse en la terminal.

Para referencia, publicaré el texto relevante aquí:

  

Ahora necesitamos una manera de comenzar el guión. Esto se puede hacer con el comando bash "trap", haciendo que escuche la señal EXIT. Como quiero que esto suceda cada vez que mi usuario abre un shell, lo agrego a mi archivo .profile. Hago esto con nano:

     

$ nano ~ / .profile

     

En este archivo, agregue lo siguiente en algún lugar. Es posible que deba editar la ruta al 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 recibe, ejecuta el script que creamos anteriormente.

Question

¿Cómo hago para solucionar este problema? Por alguna razón, la trampa no está disparando o funcionando como debería, incluso después de numerosos reinicios. ¿Hay alguna forma alternativa de cerrar la aplicación Terminal cuando se cierre la última pestaña?

Solución

Los enlaces proporcionados por Dori llevaron a la solución. El artículo sugiere que el comando de captura debería estar en .profile , cuando en realidad debe colocarse en .bashrc . Moverlo al script correcto solucionó el problema.

    
pregunta BinaryMisfit 09.10.2010 - 20:36

4 respuestas

4

El enfoque que se da aquí parece un poco más simple, tal vez le funcione. ?

  

Si no desea recordar escribir "salir" en lugar de "salir", y está usando bash, simplemente agregue lo siguiente a su .bashrc u otra secuencia de comandos de inicio de shell:

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

¿Qué hace? Cuando el shell recibe la señal 0 (cero), es decir, se le dice que salga, ejecutará este comando como lo último que hace. Esto permite que su shell, etc., salga correctamente, 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 se cierra, luego Terminal se cierra, todo de manera limpia y de la forma en que la naturaleza lo hizo.

El tema completo se puede encontrar aquí .

    
respondido por el Dori 12.10.2010 - 01:56
3

También puede utilizar este comando complicado, que no activa una advertencia sobre la finalización de su propio proceso:

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

O, podría 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'
    
respondido por el David P. 17.03.2014 - 07:03
2

No necesita trap ninguna señal.

Simplemente, ponga el comando osascript en su archivo ~/.bash_logout (créelo, si no existe)

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

bash ejecuta .bash_logout después de cerrar la sesión. Puede ingresar cualquier comando de shell en este archivo, cada uno se ejecutará cuando 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 similar ...

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

y así sucesivamente ...

    
respondido por el jm666 30.05.2011 - 17:19
1

Encuentro esta URL para mayúsculas y minúsculas. enlace
acaba de probar en os x 10.8.2
TL.DR:
para la parte de la pestaña (salir para cerrar la pestaña actual)
Terminal > Preferencias > Configuraciones > Shell
Cuando sale el shell: cerrar si el shell salió limpiamente (o cerrar la ventana)
Preguntar antes de cerrar: Nunca (o Solo si hay procesos distintos al shell de inicio de sesión y: Insertar "osascript")

para la última parte de la pestaña (salir para cerrar esta última pestaña y todas las ventanas de la terminal 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 ayude.

    
respondido por el sunqiang 09.12.2012 - 04:27

Lea otras preguntas en las etiquetas