Czy można otworzyć nową kartę w terminalu Mac OS X z wiersza poleceń w aktualnie otwartej karcie?
Wiem, że skrót klawiaturowy otwierający nową kartę w Terminalu to „CMD + t”, ale szukam rozwiązania opartego na skryptach, wykonywanego w wierszu poleceń.
echo hello
w tej nowej karcie.-e 'tell application "Terminal" to do script "echo hello" in selected tab of the front window'
na końcu polecenia osascript.open -a iTerm ~/Applications/
-e 'tell application "Terminal" to do script "cd /path/to/target/directory" in selected tab of the front window'
. Zwróć uwagę, że jeśli ścieżka pochodzi ze zmiennej, będziesz musiał użyć łańcucha w podwójnych cudzysłowach zamiast w apostrofach i uciec od wewnętrznego cudzysłowu i prawdopodobnie samej ścieżki.Aktualizacja : Ta odpowiedź zyskała popularność dzięki funkcji powłoki zamieszczonej poniżej, która nadal działa od wersji OSX 10.10 (z wyjątkiem
-g
opcji).Jednak bardziej funkcjonalna, solidniejsza, przetestowana wersja skryptu jest teraz dostępna w rejestrze npm jako CLI
ttab
, która obsługuje również iTerm2 :Jeśli masz zainstalowany Node.js , po prostu uruchom:
(w zależności od tego, jak zainstalowałeś Node.js, może być konieczne dodanie przedrostka
sudo
).W przeciwnym razie postępuj zgodnie z tymi instrukcjami .
Po zainstalowaniu uruchom,
ttab -h
aby uzyskać zwięzłe informacje o użytkowaniu lubman ttab
wyświetlić instrukcję.Opierając się na zaakceptowanej odpowiedzi, poniżej znajduje się wygodna funkcja bash do otwierania nowej karty w bieżącym oknie Terminala i opcjonalnie wykonywania polecenia (jako bonus, zamiast tego dostępna jest opcja wariantu do tworzenia nowego okna ).
Jeśli określono polecenie, jego pierwszy token zostanie użyty jako tytuł nowej karty.
Przykładowe wywołania:
OSTRZEŻENIE : Po uruchomieniu
newtab
(lubnewwin
) ze skryptu początkowy folder roboczy skryptu będzie folderem roboczym w nowej karcie / oknie, nawet jeśli zmienisz folder roboczy w skrypcie przed wywołaniemnewtab
/newwin
- passeval
za pomocącd
polecenia jako obejścia (patrz przykład powyżej).Kod źródłowy (na przykład wklej do swojego profilu bash):
źródło
-g
(nie aktywuj Terminala podczas tworzenia nowej karty / okna) i-G
(nie aktywuj terminala i nie zmieniaj aktywnej karty w terminalu) ) - pomocne np. przy uruchamianiu serwera w tle. Zwróć uwagę, że tworząc w ten sposób nową kartę, Terminal nadal musi zostać aktywowany na krótko przed ponownym aktywowaniem poprzednio aktywnej aplikacji.newtab
niestety NIE działa. Sposób obejścia problemu polega na przekazaniueval
instrukcji zcd
poleceniem donewtab
; npnewtab eval "cd ~/Library/Application\ Support; ls"
. : . Cytuj dwukrotnie całe polecenie przekazane doeval
i użyj wewnątrz znaku odwrotnego ukośnika.function newtab
ifunction newwin
(jednak BEZ nawiasów), aby uniknąć kolizji z aliasami podczas definiowania funkcji, ale pamiętaj, że przy wywołaniu alias o tej samej nazwie ma pierwszeństwo (do ominąć alias, ad-hoc, zacytować dowolną część nazwy funkcji, np\newtab
.:).<name>() { ... }
składni funkcji sprawia<name>
podlegającego ekspansji alias , który łamie definicję funkcji, jeśli alias (parsowania błąd!)<name>
Dzieje się zdefiniować. Zwykle nie jest to problem, ponieważ w normalnie wywoływanych skryptach rozwijanie aliasów jest domyślnie wyłączone. Jednak w skryptach ŹRÓDŁOWYCH z powłoki INTERAKTYWNEJ - na przykład w plikach profili / inicjalizacyjnych - rozszerzanie aliasów JEST włączone. Poprawka: Użyjfunction <name> { ... }
składni innej niż POSIX do zdefiniowania funkcji -<name>
NIE podlega wówczas rozszerzaniu aliasów.if [ "${BASH_SOURCE}" == "${0}" ]
oświadczenie przypadku tak to można nazwać jako skrypt (npnewtab.sh
,newwin.sh
): gist.github.com/westurner/01b6be85e5a51fda22a6Oto jak to robi bash_it :
Po dodaniu tego do swojego .bash_profile, użyjesz
tab
polecenia, aby otworzyć bieżący katalog roboczy w nowej karcie.Zobacz: https://github.com/revans/bash-it/blob/master/plugins/available/osx.plugin.bash#L3
źródło
Spowoduje to otwarcie nowego terminala i wykonanie w nim polecenia „echo hello”.
źródło
do script ""
z pustym ciągiem, aby utworzyć nowy terminal bez wydawania polecenia.Jeśli używasz oh-my-zsh (z którego powinien korzystać każdy modny maniak), po aktywacji wtyczki "osx"
.zshrc
po prostu wpisztab
polecenie; otworzy nową kartę icd
katalog, w którym byłeś.źródło
tab
nie wydaje się nic robićSkrót klawiaturowy
cmd-t
otwiera nową kartę, więc możesz przekazać to naciśnięcie klawisza do polecenia OSA w następujący sposób:osascript -e 'tell application "System Events"' -e 'keystroke "t" using command down' -e 'end tell'
źródło
Dodałem je do mojego .bash_profile, aby mieć dostęp do tabname i newtab
Więc kiedy jesteś na określonej karcie, możesz po prostu wpisać
aby uporządkować wszystkie otwarte karty. To znacznie lepsze niż uzyskanie informacji na karcie i jej zmiana.
źródło
Wiem, że to stary post, ale to zadziałało:
Aby wykonać polecenie zgodnie z poniższym żądaniem, trzeba trochę popracować:
źródło
gdy jesteś w oknie terminala, polecenie + n => otwiera nowy terminal, a polecenie + t => otwiera nową kartę w bieżącym oknie terminala
źródło
Jeśli używasz iTerm, to polecenie otworzy nową kartę:
źródło
i możesz przekazać katalog docelowy jako parametr
źródło
A co z tym prostym fragmentem, opartym na standardowym poleceniu skryptu (echo):
źródło
Po zainstalowaniu X-ów (np. Z homebrew lub Quartz), proste "xterm &" załatwia (prawie) sprawę, otwiera nowe okno terminala (ale nie zakładkę).
źródło