iTerm में नया टैब खोलें और वहां कमांड निष्पादित करें


18

मुझे इसमें नया टैब खोलने का तरीका मिला है 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उदाहरण में नया टैब खोलता है , लेकिन pwdiTerm के पहले उदाहरण के अंतिम टैब में लिखते हैं
मैक्सिम येफ्रेमोव

2
@ आप सही हैं। मैं इस सवाल का जवाब बदलने के लिए संपादित terminal 1करने के लिए current terminal। अब इसे पहले खोली गई खिड़की के बजाय वर्तमान विंडो में कमांड चलाना चाहिए।
१ .

2
यह iTerm2 के साथ मैक 10.11.6 पर काम नहीं किया। स्क्रिप्ट संपादक में, "लाइन का अप्रत्याशित अंत लेकिन पाया गया पहचानकर्ता" और "टर्मिनल" पर प्रकाश डाला गया है
माइक ब्लैंडफ़ोर्ड

1
यह अब execution error: System Events got an error: osascript is not allowed to send keystrokes. (1002)
macOS

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)इस पर हो रहा हूँ ।
temporary_user_name

4

कम से कम मैकोस Mojave, iTerm 3.2.8 के रूप में, यदि आप चलाते हैं:

$ open -a iTerm .

यह इसे वर्तमान विंडो के टैब के रूप में जोड़ देगा।


2

मुझे काम करने के लिए स्वीकृत उत्तर नहीं मिला। मैं भी कई आदेश पारित करना चाहता था। मैंने ये ढूंढ निकाला।

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 && यार्न रन स्टार्ट'?
राज

1
@ राज, अच्छा सवाल। मैं व्यक्तिगत रूप से अधिक उपभोज्य उपनामों और / या कार्यों में आदेशों को तोड़ता हूं। मैंने एक और उदाहरण जोड़ा। आशा करता हूँ की ये काम करेगा!
मार्क बारब्यू

बहुत बहुत धन्यवाद, @Marc!
राज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.