відкрити нову вкладку в 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"

1
якщо відкрито більше однієї iTerms, вона відкриє нову вкладку в правильному iTermекземплярі, але пише pwdв останній вкладці першої інстанції iTerm
Максим Єфремов

2
@efr Ви маєте рацію. Я редагував відповідь на зміну terminal 1в current terminal. Тепер він повинен запустити команду в поточному вікні замість вікна, яке було відкрито першим.
Лрі

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 .

Він додасть його як вкладку до поточного вікна.


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
@Raj, гарне запитання. Я особисто розбиваю команди на більш споживані псевдоніми та / або функції. Я додав ще один приклад. Сподіваюся, це допомагає!
Марк Барбо

Велике спасибі, @Marc!
Радж
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.