Chiude automaticamente Terminale quando si digita exit

5

Scenario

Uso molto il terminale in SSH, tuttavia vorrei che l'app del terminale si chiudesse quando l'ultima scheda si chiude usando exit. Ho già la stessa finestra del terminale impostata per chiudere con esito positivo, tuttavia Terminal continua a funzionare. Ho seguito il tutorial di Ricky Campbell qui che utilizza un AppleScript per uscire dal terminale . AppleScript funziona perfettamente quando si esegue all'esterno di Terminal, tuttavia in qualche modo non riesco a far funzionare il comando trap che deve essere inserito nel terminale.

Per riferimento pubblicherò il testo pertinente qui:

Now we need a way to kickoff the script. This can be done with the bash command “trap”, having it listen for the EXIT signal. Since I want this to happen everytime my user opens a shell, I add it to my .profile file. I do this with nano:

$ nano ~/.profile

In this file add the following somewhere. You may need to edit the path to the AppleScript file you created earlier:

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

All this does is listen for the EXIT signal within bash and when it gets it, runs the script we created earlier.

Domanda

Come faccio a risolvere questo problema. Per qualche motivo la trappola non sta sparando o funziona come dovrebbe, anche dopo numerosi riavvii. Esiste un modo alternativo per chiudere l'app Terminal quando viene chiusa l'ultima scheda?

Soluzione

I collegamenti forniti da Dori hanno portato alla soluzione. L'articolo suggerisce che il comando trap debba essere in .profile , quando in realtà deve essere inserito in .bashrc . Spostandolo nello script corretto risolto il problema.

    
posta BinaryMisfit 09.10.2010 - 20:36
fonte

4 risposte

4

L'approccio dato qui sembra un po 'più semplice, forse potrebbe funzionare per te ?

If you don't want to remember to type "quit" instead of "exit", and you're using bash, just add the following to your .bashrc or other shell startup script:

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

What's it do? When the shell receives signal 0 (zero), that is, told to exit, it will execute this command as the last thing it does. This allows your shell, etc, to exit gracefully, and asking Terminal.app to exit via applescript makes sure it does the same. In other words, type 'exit', and your shell exits, then Terminal quits, all cleanly and the way nature intended.

Il thread completo può essere trovato qui .

    
risposta data 12.10.2010 - 01:56
fonte
3

È anche possibile utilizzare questo comando complesso, che non attiva un avviso sulla chiusura del proprio processo:

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

In alternativa, puoi definire un alias (come quit o exit ) nel tuo profilo:

alias quit='osascript -e "do shell script \"osascript -e \\"tell application \\\\"Terminal\\\\" to quit\\" &> /dev/null &\""; exit'
    
risposta data 17.03.2014 - 07:03
fonte
2

Non hai bisogno di trap di qualsiasi segnale.

Semplicemente, metti il comando osascript nel tuo file ~/.bash_logout (crealo, se non esiste)

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

Il .bash_logout viene eseguito da bash dopo il logout. È possibile inserire qualsiasi comando di shell in questo file, ognuno verrà eseguito al momento del logout.

Ad esempio, puoi aprire una finestra del Finder nella cartella in cui eri scorso, prima di uscire, con open . o come ...

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

e così via ...

    
risposta data 30.05.2011 - 17:19
fonte
1

Trovo questo url per il caso Terminal multitasto. link
appena testato su os x 10.8.2
TL.DR:
per la parte della scheda (esci per chiudere la scheda corrente)
Terminal > Preferenze > Impostazioni > Shell
Quando la shell termina: Chiudi se la shell è stata chiusa in modo pulito (o Chiudi la finestra)
Chiedi conferma prima di chiudere: Mai (o Solo se ci sono processi diversi dalla shell di login e: Inserisci "osascript")

per l'ultima parte della scheda (esci per chiudere quest'ultima scheda e l'intera finestra del terminale e chiudi Terminal.app):
1) aggiungi a ~/.bash_profile :

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

2) create 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

Spero che ti aiuti.

    
risposta data 09.12.2012 - 04:27
fonte

Leggi altre domande sui tag