2010-04-02 3 views
19

Nel mio script di shell, le mie ultime righe sono:Come posso ottenere un file ".command" per Mac per uscire automaticamente dopo aver eseguito uno script di shell?

... 
echo "$l" done 
done 

exit 

ho Terminal preferenza impostata a "Quando le uscite shell: chiudere la finestra". In tutti gli altri casi, quando digito "exit" o "logout", in Terminale, la finestra si chiude, ma per questo file ".command" (posso fare doppio clic sul file di script della shell e lo script viene eseguito), invece di chiudere la finestra, mentre il codice del file dice "uscita", quello che mostra sullo schermo è:

... 
$l done 
logout 

[Process completed] 

... e la finestra rimane aperta. Qualcuno sa come ottenere l'esecuzione di uno script di shell e quindi si chiude automaticamente la finestra Terminale al termine?

Grazie!

+0

Qualcuno ha almeno qualche indizio su dove potrei cercare questo? – LOlliffe

+0

stessa domanda qui: http://stackoverflow.com/questions/8798641/close-terminal-window-from-within-shell-script-unix – ericsoco

risposta

23

sono stato finalmente in grado di rintracciare una risposta a questo. Simile alla risposta di cobbal, richiama AppleScript, ma poiché è l'unica finestra che avrei aperto e voglio eseguire il mio script come una rapida operazione di apertura e chiusura, questo approccio più brutale funziona alla grande per me.

All'interno dello script ".command" sé "... aggiungere questa linea al vostro script alla fine"

osascript -e 'tell application "Terminal" to quit' & 
exit 

FONTE: http://forums.macosxhints.com/archive/index.php/t-2538.html

+0

Sembra che la finestra di Terminale richieda di confermare (poiché non desidero che le preferenze di Terminale vengano aggiornate globalmente). – Cahit

+4

Ma questo chiuderebbe tutte le finestre di terminale anche se erano aperte per altri scopi. – jayatubi

0

Esiste un'impostazione per questo nell'applicazione Terminale. Sfortunatamente, è relativo a tutte le finestre di Terminale, non solo a quelle lanciate tramite il file .comm.

+0

In Preferences, ho impostato "Alla chiusura della shell: Chiudi la finestra" e "Prompt before closing: Never", ma si comporta ancora nel modo in cui disegno sopra. C'è un altro ambiente che mi manca? Grazie – LOlliffe

+0

@LOlliffe funziona in questo modo, assicurati di cambiare le impostazioni per il tema predefinito. – cobbal

0

si potrebbe usare un po 'di hacking AppleScript per questo:

tell application "Terminal" 
    repeat with i from 1 to number of windows 
     if (number of (tabs of (item i of windows) whose tty is "/dev/ttys002")) is not 0 then 
      close item i of windows 
      exit repeat 
     end if 
    end repeat 
end tell 

sostituendo /dev/ttys002 con il tty

0

sto usando il seguente comando nel mio sceneggiatura

uscire -n terminale

Naturalmente bisogna avere il terminale impostato mai chiesto prima della chiusura.

+0

L'OP menziona uno script di shell, quindi è necessario specificare che lo script è AppleScript. –

18

questo ha funzionato perfettamente per me .. è solo che chiude finestra di esecuzione lasciando le altre finestre di terminale aperte

Basta aprire il Terminale e andare a Terminal> Preferenze> Impostazioni> Shell:> Quando le uscite shell: -> Chiudi se la shell è stata chiusa in modo pulito

Quindi aggiungere solo uscita; alla fine del tuo file.

+0

La risposta accettata stava chiudendo il processo ('sourcetree nel mio caso') avviato dallo script. Questa risposta ha appena chiuso il terminale proprio come mi aspettavo. –

0

Breve di dover utilizzare le soluzioni AppleScript sopra, questa è l'unica soluzione di script di shell che ha funzionato (exit non ha fatto), anche se di colpo, per me (testato in OS X 10.9):

... 
echo "$l" done 
done 

killall Terminal 

Ovviamente questo ucciderà tutte le istanze di Terminal in esecuzione, quindi se si stava lavorando su una finestra di Terminale prima di avviare lo script, verrà terminato. Fortunatamente, il riavvio di Terminal ti porta in uno stato "Ripristinato" ma, tuttavia, questo deve essere considerato solo per casi limite e non come soluzione pulita.

4

utilizzare il 'Terminal> Preferenze> Impostazioni> Shell:> Quando le uscite shell: -> Chiudi se la shell è uscito in modo pulito' opzione di cui sopra, ma mettere

exit 0 

come l'ultima riga del comando file. Questo assicura che lo script faccia davvero "exit cleanly" - altrimenti se il comando precedente non restituisce il successo, la finestra non si chiuderà.