otwórz nową kartę w iTerm i tam wykonaj polecenie

17

Znalazłem sposób na otwarcie nowej karty w iTerm:

newtabi()
{
    osascript -e 'tell application "iTerm" to activate' -e 'tell application "System Events" to tell process "iTerm" to keystroke "t" using command down'
}

I chcę wykonać niektóre polecenia w nowej karcie. Niech będzie to proste polecenie pwd. Jak to zrobić?

Jeśli uruchomię ...

newtabi && pwd

Nowa karta jest otwierana zgodnie z oczekiwaniami, ale pwdpolecenie jest wykonywane nie w nowej karcie, ale w starej, gdzie wpisałemnewtabi && pwd

Używam zsh. Mój system operacyjny toOS X 10.8.5

Maksym Jefremow
źródło

Odpowiedzi:

16

Użyj tell session -1 of current terminal to write text "pwd":

activate application "iTerm"
tell application "System Events" to keystroke "t" using command down
tell application "iTerm" to tell session -1 of current terminal to write text "pwd"
Lri
źródło
1
jeśli otwarty więcej niż jeden iTerms, otwiera nową kartę w prawidłowej iTerminstancji, ale zapisuje pwdw ostatniej karcie pierwszej instancji iTerm
Maxim Jefremow
2
@efr Masz rację. Zredagowałem odpowiedź, aby zmienić terminal 1na current terminal. Teraz powinno uruchomić polecenie w bieżącym oknie zamiast w oknie, które zostało otwarte jako pierwsze.
Lri
2
To nie działało na Mac 10.11.6 z iTerm2. W edytorze skryptów wyróżniono „Nieoczekiwany koniec wiersza, ale znaleziono identyfikator” i „terminal”
Mike Blandford,
1
To już nie działa w systemie macOS 10.14:execution error: System Events got an error: osascript is not allowed to send keystrokes. (1002)
KernelSanders
12
osascript \
-e 'tell application "iTerm" to activate' \
-e 'tell application "System Events" to tell process "iTerm" to keystroke "t" using command down' \
-e 'tell application "System Events" to tell process "iTerm" to keystroke "ls"' \
-e 'tell application "System Events" to tell process "iTerm" to key code 52'
Dan Zen
źródło
Wchodzę 148:156: syntax error: Expected end of line but found identifier. (-2741)w to.
tymczasowego
4

Przynajmniej makos Mojave, iTerm 3.2.8, jeśli uruchomisz:

$ open -a iTerm .

Doda to jako zakładkę do bieżącego okna.

krainboltgreene
źródło
1

Nie mogłem uzyskać przyjętej odpowiedzi do pracy. Chciałem również przekazać wiele poleceń. Właśnie to wymyśliłem.

newtabi(){  
  osascript \
    -e 'tell application "iTerm2" to tell current window to set newWindow to (create tab with default profile)'\
    -e "tell application \"iTerm2\" to tell current session of newWindow to write text \"${@}\""
}

Przykładowe użycie

newtabi pwd
newtabi 'cd ~/ && pwd'
newtabi 'echo \"Hello New Tab\"'

W przypadku bardziej skomplikowanych działań polecam rozbicie poleceń.

code_folder="/path/to/code"

alias project="cd ${code_folder}/my-project/foo && yarn run start"

Następnie, newtabi project

Marc Barbeau
źródło
Czy możesz mi powiedzieć, jak mogę przekazać mój prąd, pwdaby polecenie wyglądało następująco: `newtabi '$ PWD / foo && run run start?
Raj,
1
@Raj, dobre pytanie. Osobiście dzielę polecenia na bardziej użyteczne aliasy i / lub funkcje. Dodałem inny przykład. Mam nadzieję, że to pomoże!
Marc Barbeau,
Wielkie dzięki, @Marc!
Raj