Cerrar la terminal usando 'salir' cuando solo hay una ventana, cerrar la ventana de lo contrario

2

Cuando uso la aplicación Terminal, quiero cerrarla con el comando exit si solo hay una ventana de Terminal abierta. Si hay más de una ventana abierta, quiero cerrar solo la ventana que ejecutó el comando de salida.

Para lograr este comportamiento, uso la siguiente función en mi .bash_profile

function exit {
    if [ $(who | wc -l) -eq 2 ]; then
        osascript -e 'tell application "Terminal" to quit'
    else
        osascript -e 'tell application "Terminal" to close first window'
    fi
}

Todo funciona bien, pero el uso de $(who | wc -l) -eq 2 parece ser un poco hacky . En particular, esto solo funciona si la máquina es utilizada por un solo usuario. ¿Hay otras formas de hacer el trabajo?

    
pregunta datell 18.04.2018 - 19:08

1 respuesta

2

¡Buen truco!

Si desea cubrir el caso de borde en el que hay varias personas conectadas a Mac y ejecutando Terminal, le sugiero que cambie la prueba if a if [ $(ps | wc -l) -eq 3 ]; , lo que significa que su usuario solo tuvo un proceso en ejecución, el bash shell desea salir y salir de Terminal.

Personalmente, uso iTerm2 que tiene una preferencia (bajo "General") para "Salir cuando todas las ventanas están cerradas", por lo que la aplicación se encarga de ello. Si ha llegado tan lejos con bash , recomiendo encarecidamente iTerm2.

Por cierto, su método se interrumpe en iTerm2 ya que solo muestra un inicio de sesión con who sin importar la cantidad de ventanas que tenga abiertas. Algunas veces, mi solución puede dejar de reconocer una sola ventana si las cierra rápidamente en iTerm2, ya que la aplicación tarda unos segundos en cerrar la instancia del servidor de ventanas.

Si tienes a la vez Terminal y iTerm en ejecución, se rompe todo lo que se me ocurre, pero solo lo harías si fueras un usuario constante de iTerm2 respondiendo una pregunta en AskDifferent sobre Terminal. :)

    
respondido por el Tony Williams 18.04.2018 - 20:33

Lea otras preguntas en las etiquetas