शेल स्क्रिप्ट cd कमांड नहीं चलेगी


15

मैं एक पाठ आधारित खेल, भारी गुफा साहसिक है, कि मैं बजाय टर्मिनल और टाइपिंग खोलने का एक खोल स्क्रिप्ट के साथ शुरू करने के लिए चाहते हैं cd ~/Desktop/CCAऔर ./Adventure। मैं जिस कोड का उपयोग करने की कोशिश कर रहा हूं वह यह है:

#! /bin/bash
gnome-terminal -e 'cd ~/Desktop/CCA/; ./Adventure'

और मुझे प्राप्त होने वाला संदेश यह है:

There was an error creating the child process for this terminal
Failed to execute child process `cd` (No such file or directory)

प्रोफ़ाइल वरीयताओं को बदलने या प्रक्रिया को फिर से शुरू करने के विकल्प के साथ। मैंने इसके बजाय निरपेक्ष पथ का उपयोग करने की कोशिश की है ~/, और मेरे सभी फ़ाइल नाम सही ढंग से वर्तनी हैं और सही जगह पर इंगित करते हैं। गलत क्या है?

जवाबों:


16

cd शेल बनाया गया है। आपको इसका उपयोग करना चाहिए:

#! /bin/bash
gnome-terminal --working-directory=/home/username/Desktop/CCA/ -e './Adventure'

धन्यवाद, मैं नहीं जानता cdथा कि एक आदेश नहीं था।
Giaphage47

1
cdनिश्चित रूप से एक आदेश है! यह वही है जो शेल निर्मित कमांड के रूप में जाना जाता है , जैसा कि हस्तूर का उत्तर सही ढंग से बताता है। शेल बिलिन कमांड को अक्सर शॉर्ट के लिए "शेल बिल्डिन" या "बिल्डइन" कहा जाता है, लेकिन वे बिल्कुल कमांड हैं। जो cdनहीं है वह बाहरी आदेश है । उबंटू का कोई cd कार्यक्रम नहीं है (और अगर यह किया गया, तो इसे चलाने से निर्देशिका को उस शेल में बदलने का प्रभाव नहीं होगा जहां से आपने इसे चलाया था )। @ गिआफेगी 47
कगन

11

त्रुटि

Failed to execute child process "cd" (No such file or directory)

उठता है क्योंकि cdएक है SHELL BUILTIN COMMANDSऔर एक निष्पादन योग्य नहीं है जिसे आप शारीरिक रूप से अपनी हार्ड डिस्क पर पाते हैं।

इसे चलाने के लिए या built-inआपके द्वारा लिखी गई अन्य स्क्रिप्ट में आपको एक bashआह्वान के लिए सभी पंक्ति को पास करने की आवश्यकता होती है

 gnome-terminal -e '/bin/bash -c "cd ~/Desktop/CCA/; ./Adventure" '   

यदि कोई अन्य आंतरिक आदेश नहीं है, जिसे आपको निष्पादित करना है, तो आप कार्य निर्देशिका को सेट कर सकते हैं gnome terminal, जैसा कि यहां पर उत्तर दिया गया है :

gnome-terminal --working-directory=/home/username/Desktop/CCA/ -e './Adventure'

विज्ञापन की समाप्ति : कुछ विकल्प हैं:

यदि आप एक टर्मिनल में हैं तो आप या तो कर सकते हैं

  • एक aliasपसंद करें
    alias Star_My_Game="cd ~/Desktop/CCA; ./Adventure "
    और इसे अपने में .bashrcया ~/.bash_aliasesजिसमें आप Start_My_Gameप्रत्येक शेल में सिंगल कमांड के साथ चला पाएंगे, यह Start_My_Game ... की तुलना में एक सरल / संक्षिप्त नाम चुनने के लिए अधिक आरामदायक है।)

  • या एक स्क्रिप्ट जिसे आप निष्पादन योग्य बना सकते हैं ( chmod u+x MYscript) और अपने में डाल path(टिपिकल ~/binएक अच्छा उम्मीदवार है)।

मुझे लगता है कि आप अपने डेस्कटॉप पर एक लिंक डाल सकते हैं जो टर्मिनल को निष्पादित करते हैं और शुरुआती व्यवहार को संशोधित करते हैं। सूक्ति सहायता से

  1. संपादित करें। प्रोफ़ाइल वरीयताएँ Edit शीर्षक और कमान चुनें।

  2. मेरे शेल के बजाय कस्टम कमांड चलाएँ।

  3. पाठ बॉक्स में, कमांड या वांछित शेल टाइप करें।

  4. आपके द्वारा निर्दिष्ट किए गए किसी भी तर्क सहित, जैसे ही आप इसे लिखते हैं, कमांड को टर्मिनल में पास किया जाएगा। पर्यावरण चर को टर्मिनल से विरासत में लिया जाएगा क्योंकि यह टर्मिनल की एक बाल प्रक्रिया है।

    कस्टम शेल या कमांड कैसे निष्पादित होता है, यह देखने के लिए एक नया टर्मिनल टैब या विंडो खोलें


लेकिन बिंदु एक शेल स्क्रिप्ट से लॉन्च करना था, और टर्मिनल विंडो खोलना नहीं था।
गिफाएजिया ४ '

यदि आप एक स्क्रिप्ट से लॉन्च करना चाहते हैं, तो एक और alias(अधिक आरामदायक) या आपकी ~ / बिन निर्देशिका में एक स्क्रिप्ट, एक नया टर्मिनल लॉन्च करने के लिए बिना
पर्याप्त है

केवल आपके द्वारा फिर से आवश्यक होने पर अपडेट किए गए उत्तर: इसे पास करना संभव है cdलेकिन आपको इसे पास करने की आवश्यकता है bash। इसे चैक दें :) -
Hastur
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.