मैं एक स्क्रिप्ट कैसे बना सकता हूं जो टर्मिनल विंडो खोलता है और उनमें कमांड निष्पादित करता है?


140

मेरे पास तीन स्क्रिप्ट हैं जिन्हें मुझे अपने उबंटू मशीन को शुरू करने के लिए चलाने की आवश्यकता है, वे उन सेवाओं को शुरू करते हैं जो मैं अपने विकास के वातावरण में उपयोग करता हूं।

ऐसा करने के लिए, मैं मैन्युअल रूप से तीन टर्मिनल खोलता हूं और कमांड में टाइप करता हूं।

क्या कोई स्क्रिप्ट बनाने का कोई तरीका है जो तीन टर्मिनल खोलेगा और इनमें से प्रत्येक में एक कमांड निष्पादित करेगा? (प्रत्येक कमांड एक अलग टर्मिनल विंडो में होनी चाहिए ताकि मैं उनका आउटपुट देख सकूं)।

जवाबों:


138
gnome-terminal -e command

या

xterm -e command

या

konsole -e command

बहुत ज्यादा

terminal -e command

आदेश से बाहर निकलने पर टर्मिनल को बनाए रखने के लिए:

कोनो कंसोल में एक --nocloseझंडा होता है।

Xterm में, एक -holdझंडा है।

में gnome-terminal, संपादन पर जाएँ -> प्रोफ़ाइल प्राथमिकताएँ -> शीर्षककमांड टैब पर क्लिक करें । कमांड बाहर निकलने पर लेबल ड्रॉप-डाउन मेनू से टर्मिनल को चुनें । आपको उसके लिए एक नया प्रोफ़ाइल बनाना चाहिए और उसके साथ निष्पादित करना चाहिए

gnome-terminal --window-with-profile = NAMEOFTHEPROFILE -e कमांड

1
यदि मैं टर्मिनल को रखने की कोशिश करता हूं, तो मुझे "बाल प्रक्रिया सामान्य रूप से स्थिति कोड 127 के साथ बाहर निकलती है"
दर्शन चौधरी

2
सूक्ति-टर्मिनल के पास शीर्षक विकल्प नहीं है :(
törzsmókus

1
@ törzsmókus यह वास्तव में 2017 है! एलटीएस रिलीज में 5 साल का समर्थन जीवन है। 14.04 अप्रैल 2019 तक समाप्त नहीं होता है। wiki.ubuntu.com/Releases
bhass1

1
gnome-terminal -e commandकेवल अगर commandउद्धृत किया गया है तो काम करता है। तो यह काम नहीं करता है: gnome-terminal -e "echo hello world; sleep 3"लेकिन यह करता है gnome-terminal -e "bash -c 'echo hello world; sleep 3'":। आह।
bgoodr

3
आप ; $SHELLकमांड के अंत में जोड़कर सूक्ति-टर्मिनल भी खोल सकते हैं । Ex:gnome-terminal --tab --title="test" --command="bash -c 'cd /etc; ls; $SHELL'"
गेब्रियल स्टेपल

58

हार्ड-कोडिंग gnome-terminal, konsoleएट वगैरह के बजाय , अल्टरनेटिव सिस्टम का उपयोग करें। डिफ़ॉल्ट टर्मिनल एमुलेटर को निष्पादित करने वाला कार्यक्रम है:

x-terminal-emulator

मेरे सिस्टम पर, यह हर बार जब मैं इस कमांड को निष्पादित करता हूं, तो यह कंसोल का एक नया उदाहरण खोलता है।

सौभाग्य से, टर्मिनल -eएक कमांड निष्पादित करने के विकल्प का समर्थन करते हैं (मैंने इसे सत्यापित किया है konsoleऔर gnome-terminal)। आदेश के बाद तर्क लागू किए गए आदेश को पारित किया जाता है। बैश ने मेरे टर्मिनल में खुले रहने से मना कर दिया, टर्मिनल पाने के लिए एक अतिरिक्त स्क्रिप्ट की आवश्यकता है:

#!/bin/sh
"$@"
exec "$SHELL"

यदि आपने पिछली स्क्रिप्ट को सहेज लिया है /home/user/hackyऔर इसे निष्पादन योग्य बना दिया है, तो आप अपनी स्क्रिप्ट को इसके साथ चलाएंगे:

x-terminal-emulator -e /home/user/hacky your-script optional arguments here

पूर्ण पथ की आवश्यकता है और /home/user/hackyनिष्पादन योग्य होना चाहिए।

एक नई टर्मिनल विंडो में स्क्रिप्ट चलाने का मेरा पिछला प्रयास # 2 संशोधन में पाया जा सकता है , इससे पहले कि मुझे एहसास हुआ कि तर्क पारित किए जा सकते हैं x-terminal-emulator


इस मामले में, यह बहुत मदद नहीं करेगा क्योंकि पूछने वाला ऐसा कुछ करना चाहता है जो सभी टर्मिनलों के लिए समान नहीं है।
निकुलेत्सकी

# 3 का प्रयास करें: इस टर्मिनल को खुला रखना चाहिए और वैकल्पिक तर्कों के साथ कार्यक्रम चलाना चाहिए।
लेकेनस्टाइन

1
मैं सूक्ति विकल्प का उपयोग करता था, हालांकि, एक बार जब मैं अपनी स्क्रिप्ट चलाता हूं, तो मुख्य टर्मिनल बंद हो जाता है !! .. कोई विचार क्यों?
मैकलान

3
@ Suda.nese डिज़ाइन द्वारा है, जब "टर्मिनल" स्क्रिप्ट निष्पादित करने के लिए किया जाता है, तो इसे छोड़ दिया जाएगा क्योंकि ऐसा करने के लिए और कुछ नहीं है। आप शेल को लागू करके इसे "ठीक" कर सकते हैं जहां आप कमांड निष्पादित कर सकते हैं ( bash) या एक पंक्ति जैसे कि read -p "Press Return to continue"
लेकेनस्टाइन

1
आप टर्मिनल में एक से अधिक कमांड कैसे चला सकते हैं? उदाहरण के लिए cd xxx && start.sh। व्याख्याकार && को कमांड के दूसरे भाग के रूप में देखता है (जो कि तार्किक है), लेकिन अगर मैं इसे उद्धृत करता हूं, तो यह पूरी बात को एक बड़े तर्क के रूप में निष्पादित करने की कोशिश करता है
रिचर्ड

9

एकदम आसानी से-

#!/bin/bash

/etc/init.d/ccpd status

यह अन्य आदेशों के लिए पर्याप्त है जिन्हें टर्मिनल में कुछ भी प्रदर्शित करने की आवश्यकता नहीं है। लेकिन यहां किसी को प्रदर्शित स्थिति को देखना होगा।
तो, इसे एक टर्मिनल विंडो में चलाने की आवश्यकता है

#!/bin/bash

gnome-terminal -e "/etc/init.d/ccpd status"  --window-with-profile=NAMEOFTHEPROFILE

अन्य पोस्ट का उद्देश्य []एक प्लेसहोल्डर होना था

यहां "NAMEOFTHEPROFILE" को उस प्रोफ़ाइल के नाम से प्रतिस्थापित किया जाना है जो "कमांड से बाहर निकलने पर टर्मिनल को पकड़ती है"।

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें


1
@cipricus मेरा मानना ​​है []कि केवल प्लेसहोल्डर था
कार्तिक टी

समझ गया। लेकिन मुझे टर्मिनल इतना तेज नहीं बंद करना है। मुझे लगता है कि यह भी जुड़े हुए प्रश्न में है

@cipricus क्या आपने प्रोफ़ाइल को आज़माया है? बस --window-with-profile=NAMEOFTHEPROFILEमुझे जो कुछ दिया गया है उसे जोड़ने की जरूरत है
कार्तिक टी

1
@cipricus मुझे बेहतर निर्देश देने के लिए घर वापस जाना होगा, लेकिन यह विचार उस विकल्प सेट के साथ एक विशेष प्रोफ़ाइल बनाना है, और ऊपर दिए गए स्थान में विशेष प्रोफ़ाइल के नाम का उपयोग करना है।
कार्तिक टी

2
@ माइसक्रिक यदि आपके लिए पर्याप्त है, तो यह ठीक है। प्रोफाइल सेटिंग्स के एक समूह से ज्यादा कुछ नहीं है। आप अपनी स्क्रिप्ट में उपयोग के लिए केवल सेटिंग्स सेट कर सकते हैं, और सभी टर्मिनलों में इसका उपयोग करने की आवश्यकता नहीं है। आप संपादित कर सकते हैं -> आपके पास मौजूद सभी प्रोफाइलों को देखने के लिए प्रोफाइल, और आप वहां जोड़ देंगे जो आपके द्वारा लिंक किए गए पोस्ट में समझाया गया था
कार्तिक टी

5

द्वारा सहायता प्राप्त @ nickguletskii का जवाब है, और उसके जवाब के तहत अपने ही टिप्पणी, और मेरी टिप्पणी की @ grabantot के वोट दें से प्रेरित है, यहाँ यह करने के लिए मेरे पसंदीदा तरीका है, खासकर जब मैं टर्मिनल तो मैं तो मैन्युअल रूप से उपयोग कर सकते हैं खुला रहना चाहता हूँ।

पूर्व। उपयोग: यह आपके स्टार्टअप प्रोग्राम्स में जोड़ने के लिए वास्तव में उपयोगी है इसलिए यह स्क्रिप्ट चलेगी, एक टर्मिनल खोलें, टर्मिनल में एक टैब बनाएं और नाम दें, और आपके लिए एक कमांड चलाएं। या, आप इस स्क्रिप्ट में अपने डेस्कटॉप पर सिम्लिंक जोड़ सकते हैं। मैं इस प्रकार के दृष्टिकोण का उपयोग करता हूं, इसलिए मैं अपने डेस्कटॉप पर एक आइकन पर डबल-क्लिक कर सकता हूं और इसे टर्मिनलों का एक गुच्छा खोल सकता हूं (विभिन्न टैब के नाम के अनुसार, मैं उनमें क्या काम करने जा रहा हूं) और सेट करने के लिए प्रोग्राम उदाहरण के लिए, दैनिक कार्य के लिए मेरा प्रोग्रामिंग वातावरण।

यहां एक आकस्मिक उदाहरण है, जो एक एकल टैब खोलता है, इसे "परीक्षण" शीर्षक देता है, फिर इसके cd /etc; lsअंदर सरल कमांड चलाता है। $SHELLअंत में हिस्सा खुला रहने के लिए ताकि आप तो इसके उत्पादन देख सकते हैं और इसे का उपयोग जारी रख सकते हैं खोल बलों (मैं स्टैक ओवरफ़्लो पर और ने इस कहीं सीखा):

gnome-terminal --tab --title="test" --command="bash -c 'cd /etc; ls; $SHELL'"

यहां एक अधिक जटिल उदाहरण है जो एक ही सूक्ति-टर्मिनल में 3 अलग-अलग टैब खोलता है। यह वास्तव में मेरे डेस्कटॉप शॉर्टकट का एक प्रकार है जिससे मैं एक ही बार में प्रोग्रामिंग विंडोज़ का एक गुच्छा खोल सकता हूं:

gnome-terminal --tab --title="tab 1" --command="bash -c 'cd /etc; ls; $SHELL'" --tab --title="tab 2" --command="bash -c 'cd ~; ls; $SHELL'" --tab --title="tab 3" --command="bash -c 'cd ~/temp3; ls; $SHELL'"

यहाँ ऊपर उस कमांड का ब्रेकडाउन है:

  • gnome-terminal = एक सूक्ति टर्मिनल खोलें
  • --tab = आगे आने के लिए एक अद्वितीय टैब खोलें
  • --title="tab 1" = इस टैब को "टैब 1" शीर्षक दें
  • --command="bash -c 'cd /etc; ls; $SHELL'"= bash -c 'cd /etc; ls; $SHELL'कमांड चलाएं , जो एक कमांड है जिसे मैंने एक उदाहरण के रूप में बनाया है; यहाँ यह क्या करता है:
    • bash -c यह एक बैश है 'c'ommand
    • cd /etc = 'c'hange' d'irectory "/ etc" पथ में
    • ls = 'इस निर्देशिका की सामग्री नहीं है
    • $SHELL= शेल को खुला रखने के लिए इस क्रिप्टिक टिडबिट की आवश्यकता होती है ताकि आप इसके साथ काम कर सकें। यदि आप खोलना चाहते हैं, तो अपना कमांड चलाएं, फिर बंद करें, बस इस हिस्से को हटा दें। हालांकि, मैं चाहता हूं कि टैब खुला रहे ताकि मैं प्रोग्रामिंग को जादू बना सकूं। :)
  • हम तब --tabटैब 2 का निर्माण करने के लिए फिर से शुरू करते हैं , फिर टैब 3 के लिए। अपने दिल की सामग्री के लिए अनुकूलित करें।

स्क्रीनशॉट:

यहां छवि विवरण दर्ज करें


1
मुझे खुशी है कि मैं मददगार था) मेरे पास ऐसी स्क्रिप्ट्स भी हैं जिन पर मैं बस क्लिक कर सकता हूं और प्रोजेक्ट पर काम करना शुरू कर सकता हूं। उनके साथ दो समस्याएं थीं: बहुत सारी टर्मिनल विंडो (उनके लिए पूरी अलग स्क्रीन थी) और उदाहरण के लिए सर्वर क्रैश होने के बाद विंडो बंद होना। यह उत्तर मेरी दोनों समस्याओं को हल करता है --tab + $ SHELL के साथ। नाइस
धरनोट

1

Lekensteyn द्वारा जवाब के लिए टिप्पणी। मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन किसी के लिए भी, जो इसे उपयोगी पाता है (जैसा कि मैंने अभी किया था) इसके बजाय एक और "हैकिंग स्क्रिप्ट" बनाने के साथ, केवल उस स्क्रिप्ट के अंदर एक फ़ंक्शन डालें जिसे आप कॉल कर रहे हैं

hacky_function()
{
"$@"
exec "$SHELL"
}

अपनी स्क्रिप्ट को "x- टर्मिनल-एमुलेटर -e / पाथ / टू / स्क्रिप्ट hacky_function वैकल्पिक तर्क" के साथ यहाँ पर कॉल करें।

स्क्रिप्ट के अंत में "$ @" डालना न भूलें


-2

मौजूदा स्क्रीन सत्र से स्क्रीन कमांड और -d डिटैच का उपयोग करें , और यहां रीटच करें -एक नए स्क्रीन सत्र को लागू करने के लिए -S डिफ़ॉल्ट नाम का उपयोग करने के बजाय एक नामित सत्र बनाएं


यह उत्तर बिल्कुल भी स्पष्ट नहीं है, कृपया अधिक समझ बनाने के लिए ध्यान
रखें

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