Ich habe mir vor Kurzem einen neuen Mac mit OS X Lion zugelegt und passe ihn gerade meinen Bedürfnissen an.
Ich habe versucht, die automatische Schließfunktion des Terminals über dessen Einstellungen zu konfigurieren (wie ich es mit Tiger und Snow Leopard gemacht habe), aber es funktioniert nicht. Ich habe „Schließen, wenn die Shell sauber beendet wurde“ eingestellt, aber wenn ich eingebe exit
, wird das Fenster geschlossen, aber die Terminal.app ist noch geöffnet. Ihr Menü ist sichtbar und mit alt+ tabkann ich sehen, dass sie läuft.
Irgendwelche Vorschläge?
Antwort1
Diese Option hat die Terminalanwendung nie geschlossen.
Beachten Sie, dass die anderen Optionen betitelt sindSchließeFensterUndSchließen Sie nicht dieFenster(Schwerpunktmine), wodurch klar wird, dass diese Einstellung sich nur auf das Schließen desFenster, nicht das gesamteAnwendung.
~/.bash_profile
Sie könnten für Ihre Shell beispielsweise in for folgendes definieren bash
:
function exit {
osascript -e 'tell application "Terminal" to quit'
}
Fügen Sie es dann osascript
zur Liste der Anwendungen hinzu, die vor dem Beenden keine Bestätigung erfordern (unter „Einstellungen“ > „Shell“). Geben Sie „“ ein, exit
um Terminal zu beenden, es sei denn, es sind andere Registerkarten mit blockierenden Programmen ausgeführt.
exit
Sie können ihm natürlich einen anderen Namen geben, um ihn vom normalen zu unterscheiden . Mir gefällt quit
das.
Antwort2
Um Terminal zu beenden, nachdem Sie das letzte Terminal/die letzte Shell geschlossen haben, können Sie Ihre Shell so einstellen, dass beim Beenden ein AppleScript ausgeführt wird:
# Quit Terminal when this shell exists if there are no other terminals open.
if [ "$TERM_PROGRAM" == "Apple_Terminal" ]; then
quit_terminal_when_no_terminals_remain() {
osascript -e 'tell application "Terminal" to if running and (count every tab of every window whose tty is not "'"$(tty)"'") is 0 then quit'
}
trap quit_terminal_when_no_terminals_remain EXIT
fi
Der Test für Apple_Terminal stellt sicher, dass dieser Code nur wirksam wird, wenn er im Terminal ausgeführt wird.
Da dies asynchron ausgeführt wird, kann das Skript vor oder nach dem Schließen des Terminals, in dem es enthalten ist, ausgeführt werden (obwohl es normalerweise danach ausgeführt wird). Wenn dieses Terminal geschlossen wird, weil der Benutzer Terminal beendet hat, kann es sein, dass Terminal nicht mehr ausgeführt wird, wenn das Skript ausgeführt wird. Daher gilt:
- Zuerst wird geprüft, ob das Terminal noch läuft. Wenn nicht, passiert nichts.
- Es wird nur beendet, wenn entweder keine Terminals oder nur das für das aktuelle TTY geöffnet ist. Es prüft, ob andere Tabs als das für das TTY-Gerät vorhanden sind, mit dem die aktuelle Shell verbunden ist "$(tty)".
Beachten Sie, dass sich diese gegenseitig stören, wenn Sie anderen Shell-Code aufrufen, der EXIT abfängt. Die Lösung besteht darin, eine andere Funktion zu erstellen, die die anderen aufruft, und „die_andere_Funktion EXIT abzufangen“, um alles aufzurufen, wenn die Shell beendet wird.
Übrigens, wie immer gilt: Wenn Ihnen diese Funktion wichtig ist, reichen Sie bitte einen Erweiterungsantrag bei Apple ein. Fordern Sie eine Voreinstellung an, damit Terminal beendet wird, wenn kein Fenster mehr geöffnet ist:https://bugreport.apple.com/
Antwort3
Als nette Lösung versuchen Sie:
open -a /Applications/Utilities/Terminal.app *.py ODER open -b com.apple.terminal *.py
Um die Shell zu starten, können Sie zu „Einstellungen“ > „Shell“ gehen und festlegen, dass sie beendet wird, wenn kein Fehler auftritt.
Dies verwende ich häufig, wenn ich viele Skripte/Befehle fast gleichzeitig ausführen muss.
Das ist es.
Antwort4
Eine viel einfachere und elegantere Lösung wäre, in Ihrem .bash_profile einen Alias mit diesem Befehl festzulegen:
alias quit="killall Terminal"
Wunderschön, oder?