buka tab baru di iTerm dan jalankan perintah di sana

17

Saya telah menemukan cara untuk membuka tab baru di iTerm:

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

Dan saya ingin menjalankan beberapa perintah di tab baru. Biarkan itu menjadi perintah sederhana pwd. Bagaimana cara melakukannya?

Jika saya lari ...

newtabi && pwd

Tab baru dibuka seperti yang diharapkan, tetapi pwdperintah dijalankan bukan di tab baru tetapi di tab lama, di mana saya mengetiknewtabi && pwd

Saya menggunakan zsh. Os sayaOS X 10.8.5

Maxim Yefremov
sumber

Jawaban:

16

Gunakan 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
sumber
1
jika dibuka lebih dari satu iTerms, itu membuka tab baru dalam iTerminstance yang benar , tetapi menulis pwddi tab terakhir instance pertama dari iTerm
Maxim Yefremov
2
@efr Anda benar. Saya mengedit jawaban untuk diubah terminal 1menjadi current terminal. Sekarang harus menjalankan perintah di jendela saat ini, bukan jendela yang dibuka terlebih dahulu.
Lri
2
Ini tidak berfungsi di mac 10.11.6 dengan iTerm2. Dalam editor skrip, "Akhir baris yang tidak terduga tetapi ditemukan pengenal" dan "terminal" disorot
Mike Blandford
1
Ini tidak lagi berfungsi di 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
sumber
Saya mengerti 148:156: syntax error: Expected end of line but found identifier. (-2741)ini.
temporary_user_name
4

Setidaknya Macos Mojave, iTerm 3.2.8, jika Anda menjalankan:

$ open -a iTerm .

Ini akan menambahkannya sebagai tab ke jendela saat ini.

krainboltgreene
sumber
1

Saya tidak bisa mendapatkan jawaban yang diterima untuk bekerja. Saya juga ingin melewati beberapa perintah. Inilah yang saya pikirkan.

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

Contoh penggunaan

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

Untuk tindakan yang lebih kompleks, saya akan merekomendasikan memecah perintah.

code_folder="/path/to/code"

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

Kemudian, newtabi project

Marc Barbeau
sumber
Bisakah Anda memberi tahu saya bagaimana saya bisa meneruskan arus saya pwduntuk membuat perintah terlihat seperti: `newtabi '$ PWD / foo && run benang start'?
Raj
1
@ Raj, pertanyaan bagus. Saya pribadi memecah perintah menjadi alias lebih banyak dan / atau fungsi. Saya menambahkan contoh lain. Semoga ini bisa membantu!
Marc Barbeau
Terima kasih banyak, @ Mark!
Raj