Domanda

Scenario

Io uso terminale SSH molto, ma vorrebbe l'App Terminal per uscire quando l'ultimo Tab si chiude con l'uscita. Ho già finestra terminale stesso impostato per chiudere in uscita successo, però terminale continua a funzionare. Ho seguito del tutorial qui che utilizza di Ricky Campbell un AppleScript per uscire terminale. AppleScript funziona perfettamente durante l'esecuzione all'esterno del Terminal, tuttavia qualche modo non posso ottenere il comando trap di lavoro che deve essere inserito nel terminale.

Per avere un riferimento mi post il testo pertinente qui:

Ora abbiamo bisogno di un modo per calcio d'inizio allo script. Questo può essere fatto con il comando bash “trappola”, avendo in ascolto per il segnale EXIT. Dal momento che voglio che questo accada ogni volta che il mio utente apre una shell, lo aggiungo al mio file .profile. Lo faccio con nano:

$ nano ~ / .profile

In questo file aggiungere la seguente da qualche parte. Potrebbe essere necessario modificare il percorso del file AppleScript creato in precedenza:

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

Tutto questo non fa altro che ascoltare il segnale EXIT all'interno di bash e quando si ottiene, esegue lo script che abbiamo creato in precedenza.

Domanda

Come posso fare sulla risoluzione di questo problema. Per qualche motivo la trappola non è sparare o lavorando come dovrebbe, anche dopo numerosi riavvii. C'è un modo alternativo per ottenere l'App Terminale per chiudono quando l'ultima scheda uscite?

Soluzione

I link forniti da Dori ha portato alla soluzione. L'articolo suggerisce che il comando trappola dovrebbe essere in .profile, quando invece deve essere collocato in .bashrc. Spostamento allo script corretto risolto il problema.

È stato utile?

Soluzione

L'approccio dato qui sembra un po 'più semplice, forse sarebbe lavoro per voi?

Se non si vuole ricordare di digitare "quit" invece di "uscita", e si sta usando bash, basta aggiungere il seguente al vostro .bashrc o altri script di avvio della shell:

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

Che fare? Quando la shell riceve il segnale 0 (zero), che è, detto di uscita, esegue questo comando come ultima cosa che fa. In questo modo la shell, ecc, per uscire con garbo, e chiedendo Terminal.app per uscire tramite AppleScript si assicura che fa lo stesso. In altre parole, il tipo di 'uscita', e le vostre uscite shell, quindi viene chiuso Terminal, tutta la natura in modo pulito e il modo in cui intende.

Il filetto pieno può essere trovato qui .

Altri suggerimenti

È anche possibile utilizzare questo comando contorto, che non innescare un avvertimento circa terminare il proprio processo:

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

In alternativa, è possibile 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'

non ha bisogno trap alcun segnale.

Semplicemente, mettere il comando osascript nel file ~/.bash_logout (crearlo, se non esiste)

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

Il .bash_logout viene eseguito da bash dopo il logout. È possibile inserire qualsiasi comando della shell in questo file, ogni volontà eseguito quando si logout.

Ad esempio, è possibile aprire una finestra del Finder nella cartella in cui è stato visto l'ultima, 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 ...

Trovo questo URL per il multi tabed caso Terminal. http: // cyberdork33. wordpress.com/2010/05/25/make-osx-terminal-quit-when-last-window-closed/
appena testato su OS X 10.8.2
TL.DR:
per la parte scheda (Esci per chiudere scheda corrente)
Terminal> Preferenze> Impostazioni> Shell
Quando le uscite shell: Chiudere se la shell uscito in modo pulito (o chiudere la finestra)
Prompt prima della chiusura: mai (o solo se ci sono processi diversi gli accessi shell e: Inserire "osascript")

per la parte ultima scheda (uscita per chiudere questa ultima scheda e intere finestre di terminale e uscire Terminal.app):
1) di accodamento per ~/.bash_profile:

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

2) creare script / 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

La speranza aiuta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a apple.stackexchange
scroll top