2010-10-17 15 views
7

मैं स्क्रिप्ट के माध्यम से एक प्रोग्राम चलाने के लिए चाहता हूँ। सामान्य रूप से मैं खोल में ./program टाइप करता हूं और प्रोग्राम शुरू होता है।लिनक्स: एक स्क्रिप्ट में एक बाइनरी चलाएं

मेरी स्क्रिप्ट इस तरह दिखता है:

#!/bin/sh 
cd /home/user/path_to_the_program/ 
sh program 

यह विफल रहता है, मुझे लगता है कि अंतिम पंक्ति गलत हो गया ...

मुझे पता है यह बचकाना सवाल लेकिन THX एक बहुत है!

+0

यह #!/Bin/sh नहीं होना चाहिए? – Protostome

उत्तर

0

आपको यहां "sh" की आवश्यकता नहीं है। बस आखिरी पंक्ति पर "प्रोग्राम" डालें।

+0

यह मुझे बताता है: "प्रोग्राम: नहीं मिला" –

+0

आह, प्रोग्राम आपके $ पाथ में नहीं है। ./program काम करेगा। – Toucan

+0

ठीक है, क्या इसे स्क्रिप्ट के माध्यम से इसे पैथ में डाले बिना चलाने का कोई तरीका है? –

11

यदि ./program शैल में काम करता है, तो इसे अपनी स्क्रिप्ट में क्यों न उपयोग करें?

#!/bin/sh 
cd /home/user/path_to_the_program/ 
./program 

sh program कोशिश करते हैं और एक खोल स्क्रिप्ट के रूप में program व्याख्या करने के लिए श की शुरूआत। सबसे अधिक संभावना है कि यह एक स्क्रिप्ट नहीं है लेकिन कुछ अन्य निष्पादन योग्य फ़ाइल है, यही कारण है कि यह विफल हो जाता है।

2

आपको sh की आवश्यकता नहीं है और ऐसा लगता है कि आपके पास $PATH में प्रोग्राम का पथ नहीं है।

इस प्रयास करें:

#!/bin/sh 
cd /home/user/path_to_the_program/ 
./program 
+0

यदि 'sh' का उपयोग समझाया गया तो यह बेहतर होगा। यह 'sh' के साथ क्यों काम नहीं करता है? – Arafangion

1

यह पर्याप्त होना चाहिए:

  • निष्पादन बिट
  • कुटिया की लाइन:

    /home/user/path_to_the_program/program 
    

    यदि वह काम नहीं करता है, निम्नलिखित की जाँच कार्यक्रम (यदि यह एक स्क्रिप्ट है)

+0

यदि पथ वर्तमान निर्देशिका से संबंधित पथों पर निर्भर करता है तो पथ देना संभव नहीं हो सकता है। उदाहरण के लिए, प्रोग्राम इनपुट फ़ाइलों पर निर्भर हो सकता है जो प्रोग्राम के समान निर्देशिका में हैं। –

+0

उस स्थिति में, आप सही हैं। –

+0

यह कैसे किया जाता है, भले ही पूरा पथ/कहीं/से आना है - यदि पथ पर नहीं है, तो शेबांग लाइन के माध्यम से, यदि वहां नहीं है, तो इसे स्पष्ट रूप से कुछ तरीकों से सेट किया जाना चाहिए। – Arafangion

3

जब आप टाइप

./program 

खोल यह कैसे निर्धारित करता है फ़ाइल निष्पादित करने की आवश्यकता के अनुसार कार्यक्रम पर अमल करने की कोशिश करता है। यदि यह एक बाइनरी है, तो यह एंट्री सबराउटिन निष्पादित करने का प्रयास करेगा। खोल का पता लगाता है यह एक स्क्रिप्ट,

#!/bin/sh 

या

#!/bin/awk 

या अधिक सामान्यतः

#!/path/to/interpreter 

के उपयोग के माध्यम जैसे खोल फ़ाइल पारित करेंगे (और किसी भी आपूर्ति तर्क है) आपूर्ति किए गए दुभाषिया के लिए तर्क के रूप में, जो तब स्क्रिप्ट निष्पादित करेगा। यदि पथ में दिया गया दुभाषिया मौजूद नहीं है, तो खोल त्रुटि होगी, और यदि कोई दुभाषिया रेखा नहीं मिलती है, तो खोल मान ली जाएगी कि आपूर्ति की गई स्क्रिप्ट स्वयं ही निष्पादित की जाएगी।

एक कमांड

sh program 

./program 

के बराबर है जब कार्यक्रम की पहली पंक्ति यह सोचते हैं कि/bin/श अपने रास्ते में श (है

#!/bin/sh 

शामिल यह उदाहरण के लिए/system/bin/sh हो सकता है)। शॉन को बाइनरी पास करने से शेल स्क्रिप्ट के रूप में इसका इलाज किया जा सकता है, जो यह नहीं है, और बाइनरी व्याख्यात्मक खोल नहीं है (जो सादा पाठ है)। यही कारण है कि आप इस संदर्भ में

sh program 

का उपयोग नहीं कर सकते हैं। कार्यक्रम के कारण यह भी असफल हो जाएगा कि रूबी, अजीब, sed, या कुछ और जो शैल स्क्रिप्ट नहीं है।