Ist es möglich, eine neue Registerkarte im Mac OS X-Terminal über die Befehlszeile in einer aktuell geöffneten Registerkarte zu öffnen?
Ich weiß, dass die Tastenkombination zum Öffnen einer neuen Registerkarte in Terminal "CMD + t" lautet, suche jedoch nach einer skriptbasierten Lösung, die in der Befehlszeile ausgeführt wird.
echo hello
in diese neue Registerkarte ein?-e 'tell application "Terminal" to do script "echo hello" in selected tab of the front window'
Ende des Befehls osascript hinzufügen.open -a iTerm ~/Applications/
-e 'tell application "Terminal" to do script "cd /path/to/target/directory" in selected tab of the front window'
. Beachten Sie, dass Sie, wenn der Pfad von einer Variablen stammt, eine Zeichenfolge in doppelten Anführungszeichen anstelle von einfachen Anführungszeichen verwenden und die Zeichenfolge in inneren Anführungszeichen und wahrscheinlich den Pfad selbst maskieren müssen.Update : Diese Antwort wurde aufgrund der unten angegebenen Shell-Funktion immer beliebter, die ab OSX 10.10 (mit Ausnahme der
-g
Option) weiterhin funktioniert .Allerdings ist eine vollständiger Funktionsumfang, robuste, getestet Skriptversion ist jetzt an der zur Verfügung npm Registrierung als CLI
ttab
, die auch unterstützt iTerm2 :Wenn Sie Node.js installiert haben, führen Sie einfach Folgendes aus:
(Je nachdem, wie Sie Node.js installiert haben, müssen Sie möglicherweise ein Präfix vorstellen.
sudo
)Befolgen Sie andernfalls diese Anweisungen .
Führen Sie
ttab -h
nach der Installation kurze Nutzungsinformationen aus oderman ttab
lesen Sie das Handbuch.Aufbauend auf der akzeptierten Antwort finden Sie unten eine Bash- Convenience-Funktion zum Öffnen einer neuen Registerkarte im aktuellen Terminalfenster und zum optionalen Ausführen eines Befehls (als Bonus gibt es stattdessen eine Variantenfunktion zum Erstellen eines neuen Fensters ).
Wenn ein Befehl angegeben wird, wird sein erstes Token als Titel der neuen Registerkarte verwendet.
Beispielaufrufe:
CAVEAT : Wenn Sie ein Skript ausführen
newtab
(oder ausführennewwin
), ist der ursprüngliche Arbeitsordner des Skripts der Arbeitsordner in der neuen Registerkarte / im neuen Fenster, auch wenn Sie den Arbeitsordner im Skript ändern, bevor Sienewtab
/newwin
- passeval
mit einemcd
Befehl als Problemumgehung aufrufen (siehe Beispiel oben).Quellcode (zum Beispiel in Ihr Bash-Profil einfügen):
quelle
-g
(Terminal beim Erstellen der neuen Registerkarte / des neuen Fensters-G
nicht aktivieren ) und (Terminal nicht aktivieren und die aktive Registerkarte im Terminal nicht ändern ) - hilfreich zum Beispiel beim Starten eines Servers im Hintergrund. Beachten Sie, dass beim Erstellen einer neuen Registerkarte auf diese Weise das Terminal noch kurz aktiviert werden muss, bevor die zuvor aktive Anwendung wieder aktiviert wird.newtab
funktioniert leider NICHT. Die Problemumgehung besteht darin, eineeval
Anweisung mit einemcd
Befehl an zu übergebennewtab
. zB :newtab eval "cd ~/Library/Application\ Support; ls"
. Zitieren Sie den gesamten an übergebenen Befehl in doppelte Anführungszeicheneval
und verwenden Sie Backslash-Escape im Inneren.function newtab
undfunction newwin
(jedoch KEINE Klammern) umgestellt , damit die Kollision mit Aliasen beim Definieren der Funktionen vermieden wird. Beachten Sie jedoch, dass beim Aufruf ein gleichnamiger Alias Vorrang hat (bis Umgehen Sie den Alias ad-hoc und zitieren Sie einen beliebigen Teil des Funktionsnamens, z\newtab
. B. :) .<name>() { ... }
Funktionssyntax macht<name>
unter Alias - Erweiterung , die die Definition der Funktion unterbricht , wenn ein Alias (Parsing - Fehler!)<name>
Definiert werden , geschieht. Dies ist normalerweise kein Problem, da in normalerweise aufgerufenen Skripten die Aliaserweiterung standardmäßig deaktiviert ist. In Skripten, die aus einer INTERACTIVE-Shell stammen, z. B. in Profil- / Initialisierungsdateien, ist die Alias-Erweiterung jedoch aktiviert. Fix: Verwenden Sie eine Nicht-POSIX-function <name> { ... }
Syntax, um die Funktion zu definieren -<name>
unterliegt dann NICHT der Alias-Erweiterung.if [ "${BASH_SOURCE}" == "${0}" ]
mit einem Case - Anweisung , so kann es als ein Skript (zB genannt werdennewtab.sh
,newwin.sh
): gist.github.com/westurner/01b6be85e5a51fda22a6So geht's mit bash_it :
Nachdem Sie dies zu Ihrem .bash_profile hinzugefügt haben, öffnen Sie mit dem
tab
Befehl das aktuelle Arbeitsverzeichnis auf einer neuen Registerkarte.Siehe: https://github.com/revans/bash-it/blob/master/plugins/available/osx.plugin.bash#L3
quelle
Dies öffnet ein neues Terminal und führt den darin enthaltenen Befehl "echo hello" aus.
quelle
do script ""
mit einer leeren Zeichenfolge ein neues Terminal erstellen, ohne einen Befehl auszugeben.Wenn Sie oh-my-zsh verwenden (das jeder trendige Geek verwenden sollte), geben Sie nach Aktivierung des Plugins "osx"
.zshrc
einfach dentab
Befehl ein. Es öffnet sich eine neue Registerkarte undcd
in dem Verzeichnis, in dem Sie sich befanden.quelle
tab
scheint nichts zuDie Tastenkombination
cmd-t
öffnet eine neue Registerkarte, sodass Sie diesen Tastendruck wie folgt an den OSA-Befehl übergeben können:osascript -e 'tell application "System Events"' -e 'keystroke "t" using command down' -e 'end tell'
quelle
Ich habe diese zu meinem .bash_profile hinzugefügt, damit ich auf tabname und newtab zugreifen kann
Wenn Sie sich also auf einer bestimmten Registerkarte befinden, können Sie einfach eingeben
um alle geöffneten Registerkarten zu organisieren. Es ist viel besser, als Informationen auf der Registerkarte abzurufen und dort zu ändern.
quelle
Ich weiß, dass dies ein alter Beitrag ist, aber das hat bei mir funktioniert:
Um einen Befehl wie unten angefordert auszuführen, müssen Sie einige Schritte ausführen:
quelle
Wenn Sie sich in einem Terminalfenster befinden, öffnet Befehl + n => ein neues Terminal und Befehl + t => öffnet eine neue Registerkarte im aktuellen Terminalfenster
quelle
Wenn Sie iTerm verwenden, öffnet dieser Befehl eine neue Registerkarte:
quelle
und Sie können das Zielverzeichnis als Parameter übergeben
quelle
Was ist mit diesem einfachen Snippet, das auf einem Standard-Skriptbefehl (Echo) basiert:
quelle
Wenn X installiert ist (z. B. von Homebrew oder Quartz), reicht ein einfaches "xterm &" (fast) aus, um ein neues Terminalfenster zu öffnen (allerdings keine Registerkarte).
quelle