Ich habe vor kurzem begonnen, iTerm2 anstelle der macOS-Terminalanwendung zu verwenden, und ich bin wirklich zufrieden damit. Ich bin sehr daran gewöhnt, den exit
Befehl to zu verwenden, um die Instanz zu schließen , die derzeit den Fokus hat. Mit Instanz meine ich eines der folgenden: Tab, Window oder Split Panel.
Wie kann ich einen Funktionsausgang schreiben, der die gerade laufende Instanz schließt? Die folgende Problemumgehung funktioniert für Fenster, aber weder für Registerkarten noch für geteilte Bedienfelder:
function exit {
osascript -e 'tell application "iTerm2" to close first window'
}
zsh
Die Lösung sollte entweder mit oder funktionieren bash
.
Der Abschnitt Scripting der iTerm2-Dokumentation hat mir geholfen, mein Problem zu beheben.
In .zshrc
habe ich folgende Funktion definiert:
function exit {
osascript ~/.zsh/.function_exit.as
}
Mit ~/.zsh/.function_exit.as
als
tell application "iTerm2"
tell current window to close current session
end tell
Zusätzlich habe ich in den iTerm2-Einstellungen folgende Option gesetzt:
Wenn ich alle oben genannten Dinge zusammen verwende, erreiche ich das folgende Verhalten:
Da dies nicht von der verwendeten Shell abhängt, sollte alles perfekt funktionieren, wenn Sie bash
(und die entsprechende dot-Datei) verwenden.
exit
ist ein eingebauter Befehl , und das Erstellen einer Funktion mit einem reservierten Namen kann zu nachteiligen Ergebnissen führen.in deinem .profil könntest du hinzufügen
alias killiTerm2='killall iTerm2'
Vom Terminal aus würden Sie einfach killiTerm2 aufrufen, und es würde jede laufende Instanz von iTerm2 beenden
fd0
exit
ist eine eingebaute Shell (Befehl). Es ist keine gute Idee, eine Funktion mit demselben Namen zu haben.Allan
dtell
exit
. Wenn diese erste Registerkarte geschlossen wird,exit
schließt sich das gesamte Fenster (das ist der Teil, der bereits funktioniert).Allan
dtell
Allan
dtell
Allan
exit
, wird die Sitzung geschlossen , aber das Fenster/die Registerkarte/der Bereich bleibt geöffnet. Richtig?