Guión
Utilizo mucho la terminal para SSH, sin embargo, me gustaría que la aplicación Terminal se cerrara cuando la última pestaña se cierra usando exit. Ya tengo la ventana de la terminal configurada para cerrarse al salir con éxito, sin embargo, la Terminal sigue ejecutándose. Seguí el tutorial de Ricky Campbell aquí, que usa 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 hacer que funcione el comando trap que debe colocarse en la terminal.
Como referencia, publicaré el texto relevante aquí:
Ahora necesitamos una forma de iniciar el guión. Esto se puede hacer con el comando bash "trampa", haciendo que escuche la señal de SALIDA. Como quiero que esto suceda cada vez que mi usuario abre un shell, lo agrego a mi archivo .profile. Hago esto con nano:
$ nano ~/.perfil
En este archivo, agregue lo siguiente en alguna parte. Es posible que deba editar la ruta al archivo AppleScript que creó anteriormente:
trap '/usr/bin/osascript $HOME/Scripts/QuitTerminal.scpt' SALIR
Todo lo que hace es escuchar la señal EXIT dentro de bash y cuando la recibe, ejecuta el script que creamos anteriormente.
Pregunta
¿Cómo hago para solucionar este problema? Por alguna razón, la trampa no se dispara o no funciona como debería, incluso después de numerosos reinicios. ¿Hay alguna forma alternativa de cerrar la aplicación Terminal cuando sale 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 debe colocarse en .bashrc
. Moverlo al script correcto solucionó el problema.
El enfoque dado aquí parece un poco más simple, ¿tal vez funcione para usted?
Si no quiere acordarse de escribir "quit" en lugar de "exit", y está usando bash, simplemente agregue lo siguiente a su
.bashrc
u otro script 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 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 'salir', y su shell sale, luego la Terminal se cierra, todo limpiamente y de la forma en que la naturaleza pretendía.
También puede usar este comando enrevesado, que no activa 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, 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'
No necesita trap
ninguna señal.
Simplemente, coloque el comando osascript en su ~/.bash_logout
archivo (créelo, si no existe)
osascript -e "tell application \"Terminal\" to quit"
bash lo .bash_logout
ejecuta 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 como...
open .
say "Good bye, my master - leaving terminal now, continue with Finder"
osascript -e "tell application \"Terminal\" to quit"
etcétera...
Encuentro esta URL para el caso de Terminal con varias pestañas. http://cyberdork33.wordpress.com/2010/05/25/make-osx-terminal-quit-when-last-window-closed/
recién probado 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 el shell sale: Cierra si el shell salió limpiamente (o Cierra la ventana)
Indicar antes de cerrar: Nunca (o Solo si hay procesos que no sean el shell de inicio de sesión e: Inserta " osascript")
para la parte de la última pestaña (salir para cerrar esta última pestaña y todas las ventanas de terminal y salir de Terminal.app):
1) agregar a ~/.bash_profile
:
trap '/usr/bin/osascript $HOME/Scripts/QuitTerminal.scpt' EXIT
2) crear secuencias de comandos/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 eso ayude.
Martín Marconcini
binario inadaptado