कई टर्मिनल टैब खोलना और कमांड चलाना


9

मुझे कई टर्मिनल टैब खोलने की आवश्यकता है, उन्हें शीर्षक दें, एक निर्देशिका पर जाएं, और प्रत्येक टैब को एक कमांड चलाएं।

मैं लिनक्स और शेल पटकथा लेखन के लिए नया हूँ, ऑनलाइन खोज और कुछ समाधान की जाँच के बाद, मैं इस स्क्रिप्ट (बनाया संपादित नीचे दिए गए उत्तर के आधार पर):

#!/bin/bash

cd /media/Extra/Project

tab=" --tab-with-profile=Default"
options=(--tab --title=Terminal)

cmds[1]="'rails s'"
titles[1]="Server"

cmds[2]="'rails c'"
titles[2]="Console"


for i in 1 2; do
  options+=($tab --title="${titles[i]}"  -e "bash -c \"${cmds[i]} ; bash\"" )          
done

gnome-terminal "${options[@]}"


exit 0

यह टैब खोलता है, उन्हें नाम देता है, लेकिन इस त्रुटि को उत्पन्न करने वाले आदेशों को निष्पादित करने में विफल रहता है:

इस टर्मिनल के लिए बच्चे की प्रक्रिया बनाने में एक त्रुटि हुई थी

एक और कमी यह है कि अगर मैंने रनिंग कमांड को रोक दिया तो यह टैब को बंद कर देता है, जो मुझे नहीं चाहिए। मुझे कमांड को रोकने और उसी टैब के भीतर फिर से चलाने में सक्षम होने की आवश्यकता है।

स्क्रिप्ट में क्या गलत है? क्या ऐसा करने का एक और सरल तरीका है?

नोट: यदि मैंने कमांड से एक -e "\" बैश -c $ {cmds [i]}; बैश \ "" भाग को हटा दिया है, तो यह दिए गए डायरेक्टरी में टैब को खोलता है और बिना किसी त्रुटि के उन्हें नाम देता है।

-संपादित-1:

नीचे @Tuknutx उत्तर को लागू करने और स्क्रिप्ट को संपादित करने के बाद, त्रुटि अब दिखाई नहीं देती है, लेकिन यह मुझे देता है bash: rails c: command not foundऔर rails sरेल सर्वर शुरू करने के बजाय एक नया रेल एप्लिकेशन बनाता है, मैं इस फ़ोल्डर का उपयोग करने के बाद एक रत्न का चयन करने के लिए .rmvrc का उपयोग कर रहा हूं। ।


यदि आप अपनी स्क्रिप्ट को अपने ubuntu बूट पर चलाना चाहते हैं: - आप आपको एक upstart सेवा के रूप में स्क्रिप्ट चला सकते हैं ( help.ubuntu.com/community/UbuntuBootupHowto ) या: अपने डेस्कटॉप वातावरण में "स्टार्टअप एप्लिकेशन" का उपयोग करके
Aboelnour

अगर मैं लिखता हूं तो मुझे cmds[1]="'ping 192.168.9.9'"वही त्रुटि मिलती है लेकिन मैंने एकल उद्धरण को हटाकर इसे हल कर दिया। इसलिए अगर मैं लिखता हूं तो cmds[1]="ping 192.168.9.9"यह काम करता है।
daisy

@ इसके विपरीत, लेकिन मुझे समझ नहीं आता कि यह तीन टैब-एक डिफ़ॉल्ट और स्क्रिप्ट में सेट किए गए दो अन्य को क्यों खोलता है। क्योंकि हम परिभाषित करते हैं tab=" --tab-with-profile=Default"??
daisy

जवाबों:


3

मैं इसके tmuxसाथ tmuxinatorकाम करने की सलाह दूंगा, यह आपके लिए काम करेगा, और आप terminatorलेआउट पर भी भरोसा कर सकते हैं !

के लिए terminatorलेआउट चेकआउट mhnagaoka का जवाब यहाँ askubuntu भी:

  1. अपना लेआउट सेट करने के बाद, किसी भी टर्मिनल पृष्ठभूमि पर राइट-क्लिक करें और प्राथमिकताएँलेआउट टैब चुनें और ऐड बटन पर क्लिक करें।

  2. इसे नाम दें और क्लोज़ हिट करें

  3. यह उल्लेखित ~/.config/terminator/configफ़ाइल बनाना चाहिए ।

  4. अब आप उपयोग किए गए सहेजे गए लेआउट का उपयोग करके टर्मिनेटर शुरू कर सकते हैं: terminator -l yourLayout( चरण 2 में आपने जो भी चुना है, उसके साथ अपने लेआउट को बदलें )।

  5. (वैकल्पिक) संपादित ~/.config/terminator/configफ़ाइल ताकि जहां लिखा है [layouts]और इसके नीचे नेस्ट [[yourLayout]], नाम बदलने yourLayout को डिफ़ॉल्ट और निकालने / पिछले नाम बदलने डिफ़ॉल्ट लेआउट। अब, जब टर्मिनेटर बिना किसी पैरामीटर के शुरू होता है, तो यह आपके कस्टम [[default]]लेआउट को लोड करेगा !


2

कुछ अन्य उत्तरों और उनकी टिप्पणियों को संक्षेप में प्रस्तुत करने के लिए, यहाँ मैंने क्या किया:

#!/bin/bash

cd /path/of/my/stuff

tab=" --tab"
options=()

cmds[1]="echo Banana"

cmds[2]="echo Cat"


for i in 1 2; do
options+=($tab -e "bash -c '${cmds[i]} ; bash'" )
done

gnome-terminal "${options[@]}"

exit 0

ध्यान दें कि मैंने 'मास्टर' टैब, और प्रोफाइल और शीर्षक (जो कि पदावनत प्रतीत होते हैं gnome-terminal) को हटा दिया ।


$tab -e... Option “-e” is deprecated and might be removed in a later version of gnome-terminal.विकल्पों को समाप्त करने और उसके बाद निष्पादित करने के लिए कमांड लाइन डालने के लिए `यूज़” - ” का आउटपुट । . that's an output but the comands get executed. When i use $ टैब - `कमांड निष्पादित नहीं होती है और टर्मिनल dsisplays:There was an error creating the child process for this terminal. Failed to execute child process “bash -c 'echo Banana ; bash'” (No such file or directory)
nyxee

1

इसे इस्तेमाल करे:

options+=($tab --title="${titles[i]}"  -e "bash -c \"${cmds[i]} ; bash\"" ) 

अन्यथा पूरी अभिव्यक्ति के बाद कमांड के रूप में व्याख्या की जाएगी।

इसके -icबजाय .bashrc उपयोग से उपनाम शामिल करने के लिएc


त्रुटि अब प्रकट नहीं होती है, धन्यवाद। लेकिन यह मुझे bash: rails c: command not foundऔर 'रेल्स एस' देता है, जो रेल सर्वर शुरू करने के बजाय एक नया रेल ऐप बनाता है। इससे प्रश्न का दायरा बदल जाता है, मैं इसे स्क्रिप्ट के लिए उर संशोधन के साथ संपादित
करूंगा

क्या यह काम करता है अगर आप rails cकिसी और चीज के बिना टर्मिनल पर कोशिश करते हैं ? शायद यह होना चाहिए rails -c?
तुकसन

कोशिश की कि काम न करे। मैंने भी कोशिश की rvm list gemsetsऔर यह कहता है No command 'rvm' found.. rvm list gemsetsपहले टैब में वही कमांड चलाएं जो बिना कमांड चलाए खुल जाए और यह काम कर जाए! क्या यह पर्यावरण लोड होने से पहले कमांड चलाता है और .rvmrc फ़ाइल लोड होती है?
ब्रेरी

1

-E विकल्प को आप जो तर्क दे रहे हैं "bash -c command; bash", वह उद्धरण सहित है। यह एक कमांड के नाम के रूप में उस पूरे स्ट्रिंग की व्याख्या करता है! इसके बजाय यह प्रयास करें -e "bash -c 'command ; bash'":। इस तरह से आपके टर्मिनल विंडो commandपर जो चलता है , और उसके चलने के बाद, आपको एक बेटी खोल दी जाती है, जो मुझे लगता है कि आप क्या चाहते हैं। संयोग से, आप भी कह सकते हैं 'command & bash'; यह पृष्ठभूमि पर कमांड चलाएगा और आपको तुरंत बेटी खोल देगा।


मैं इस बदल options+=($tab --title="${titles[i]}" -e "\"bash -c ${cmds[i]} ;bash\"" )में options+=($tab --title="${titles[i]}" -e "\"bash -c '${cmds[i]} ;bash'\"" )और यह मेरे लिए एक ही त्रुटि दे दी है .. मैं यह सही कर रहा हूँ?
ब्ररी

बिल्कुल सही नहीं: दूसरे बैश के बाद पहले बैश और \ "से पहले हटा दें।
सिल्वियो लेवी

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