mở tab mới trong iTerm và thực thi lệnh ở đó


17

Tôi đã tìm thấy cách để mở tab mới trong iTerm:

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

Và tôi muốn thực hiện một số lệnh trong tab mới. Hãy để nó là lệnh đơn giản pwd. Làm thế nào để làm nó?

Nếu tôi chạy ...

newtabi && pwd

Tab mới được mở như mong đợi, nhưng pwdlệnh được thực thi không phải trong tab mới mà ở tab cũ, nơi tôi đã nhậpnewtabi && pwd

Tôi sử dụng zsh. Hệ điều hành của tôi làOS X 10.8.5

Câu trả lời:


16

Sử dụng 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
nếu mở nhiều hơn một iTerms, nó sẽ mở tab mới trong iTermtrường hợp chính xác , nhưng ghi pwdvào tab cuối cùng của phiên bản đầu tiên của iTerm
Maxim Yefremov

2
@efr Bạn nói đúng. Tôi chỉnh sửa các câu trả lời cho thay đổi terminal 1để current terminal. Bây giờ nó sẽ chạy lệnh trong cửa sổ hiện tại thay vì cửa sổ được mở trước.
Lri

2
Điều này không hoạt động trên mac 10.11.6 với iTerm2. Trong trình chỉnh sửa tập lệnh, "Cuối dòng bất ngờ nhưng định danh được tìm thấy" và "thiết bị đầu cuối" được tô sáng
Mike Blandford

1
Điều này không còn hoạt động trên 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'

Tôi đang nhận được 148:156: syntax error: Expected end of line but found identifier. (-2741)điều này.
tạm

4

Kể từ ít nhất là macos Mojave, iTerm 3.2.8, nếu bạn chạy:

$ open -a iTerm .

Nó sẽ thêm nó dưới dạng một tab vào cửa sổ hiện tại.


1

Tôi không thể nhận được câu trả lời được chấp nhận để làm việc. Tôi cũng muốn vượt qua nhiều lệnh. Đây là những gì tôi đã đưa ra.

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

Ví dụ sử dụng

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

Đối với các hành động phức tạp hơn, tôi khuyên bạn nên chia nhỏ các lệnh.

code_folder="/path/to/code"

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

Sau đó, newtabi project


Bạn có thể vui lòng cho tôi biết làm thế nào tôi có thể vượt qua hiện tại của mình pwdđể làm cho lệnh trông giống như: 'newtabi' $ PWD / foo && sợi chạy bắt đầu 'không?
Raj

1
@Raj, câu hỏi hay. Cá nhân tôi chia các lệnh thành các bí danh và / hoặc hàm tiêu hao hơn. Tôi đã thêm một ví dụ khác. Hy vọng nó giúp!
Marc Barbeau

Cảm ơn rất nhiều, @Marc!
Raj
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.