откройте новую вкладку в iTerm и выполните там команду

17

Я нашел способ открыть новую вкладку в iTerm:

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

И я хочу выполнить несколько команд в новой вкладке. Пусть это будет простая команда pwd. Как это сделать?

Если я бегу ...

newtabi && pwd

Новая вкладка открывается, как и ожидалось, но pwdкоманда выполняется не на новой вкладке, а на старой, где я набралnewtabi && pwd

Я использую zsh. Моя ОСOS X 10.8.5

Максим Ефремов
источник

Ответы:

16

Используйте 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
источник
1
если открыто больше, чем один iTerms, он открывает новую вкладку в правильном iTermэкземпляре, но записывает pwdв последнюю вкладку первого экземпляра iTerm
Максим Ефремов
2
@efr Ты прав. Я отредактировал ответ, чтобы изменить terminal 1на current terminal. Теперь он должен выполнить команду в текущем окне вместо окна, которое было открыто первым.
Lri
2
Это не сработало на Mac 10.11.6 с iTerm2. В редакторе сценариев выделены «Неожиданный конец строки, но найден идентификатор» и «терминал»
Майк Блэндфорд,
1
Это больше не работает в 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'
дан дзен
источник
Я вхожу 148:156: syntax error: Expected end of line but found identifier. (-2741)в это.
временное_имя_пользователя
4

По крайней мере, Macos Mojave, iTerm 3.2.8, если вы запустите:

$ open -a iTerm .

Он добавит его в качестве вкладки в текущее окно.

krainboltgreene
источник
1

Я не мог получить принятый ответ на работу. Я также хотел передать несколько команд. Это то, что я придумал.

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 \"${@}\""
}

Пример использования

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

Для более сложных действий я бы порекомендовал разбить команды.

code_folder="/path/to/code"

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

Потом, newtabi project

Марк Барбо
источник
Подскажите, пожалуйста, как я могу передать свой ток, pwdчтобы команда выглядела так: `newtabi '$ PWD / foo && yarn run start'?
Радж
1
@ Радж, хороший вопрос. Я лично разбиваю команды на более пригодные для использования псевдонимы и / или функции. Я добавил еще один пример. Надеюсь, это поможет!
Марк Барбо,
Большое спасибо, @Marc!
Радж