Chiudi Terminale usando 'esci' quando è presente solo una finestra, altrimenti chiudi finestra

2

Quando uso l'applicazione Terminale, voglio chiuderla usando il comando exit se è aperta una sola finestra di Terminale. Se sono aperte più finestre, voglio chiudere solo la finestra che ha eseguito il comando exit.

Per ottenere questo comportamento, utilizzo la seguente funzione nel mio .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
}

Tutto funziona alla grande ma l'uso di $(who | wc -l) -eq 2 sembra essere un po ' hacky . In particolare, questo funziona solo se la macchina viene utilizzata da un solo utente. Ci sono altri modi per fare il lavoro?

    
posta datell 18.04.2018 - 19:08
fonte

1 risposta

2

Bel trucco!

Se vuoi coprire il caso limite in cui ci sono più persone che hanno eseguito l'accesso al Mac ed esegui Terminal allora ti suggerisco di cambiare il test if in if [ $(ps | wc -l) -eq 3 ]; , il che significherebbe che il tuo utente ha solo un processo in esecuzione, il bash shell che vuoi uscire e uscire da Terminal.

Personalmente, utilizzo iTerm2 che ha una preferenza (in "Generale") per "Esci quando tutte le finestre sono chiuse", quindi l'app si prende cura di esso. Se sei arrivato fino a questo punto con bash consiglio vivamente iTerm2.

A proposito, il tuo metodo si interrompe in iTerm2 poiché mostra solo un accesso con who indipendentemente dal numero di finestre aperte. A volte la mia soluzione non riesce a riconoscere solo una finestra se le richiudi rapidamente in iTerm2, poiché l'app interrompe l'istanza del server di Windows dopo un paio di secondi.

Se hai sia terminale che iTerm in esecuzione, si rompe tutto quello che potrei pensare, ma lo faresti solo se tu fossi un utente iTerm2 costante a rispondere a una domanda su AskDifferent su Terminal. :)

    
risposta data 18.04.2018 - 20:33
fonte

Leggi altre domande sui tag