मेरा प्रोग्राम "कमांड नहीं मिला" त्रुटि के साथ नहीं चल सकता


14

मैंने विंडोज से उबंटू 11.10 पर स्विच किया।

मैंने टेक्स्ट एडिटर के साथ C में निम्नलिखित कोड लिखा और इसे दस्तावेज़ों में HelloWorld.c के रूप में सहेजा।

#include <stdio.h>
int main()
{
    printf("Hello World!\n");
    return 0;
}

और मैंने टर्मिनल शुरू किया और निम्नलिखित कमांड दर्ज करें:

cd Documents

gcc HelloWorld.c

A.out नामक एक फ़ाइल, जो Google पर कुछ खोज के बाद, निष्पादन योग्य है। मैंने इस कमांड में प्रवेश किया:

a.out

लेकिन मुझे मिलता है

a.out: command not found

मैंने कौन सा कदम गलत तरीके से उठाया?


इसे निष्पादन योग्य बनाने के लिए मत भूलना, उपयोग करेंsudo chmod 777 a.out
निक शवेलिडेज़

@NickShvelidze कंपाइलर हमेशा +xआपके लिए बहुत अधिक सेट होते हैं; आपको chmodसंकलक द्वारा उत्पादित निष्पादन योग्य की आवश्यकता नहीं है । एकमात्र सामान्य स्थिति जहां gccइसे क्रियान्वित करने में विफल रहता है, यदि यह फाइल को एक ऐसे फाइल सिस्टम में बना रहा है जो इसका समर्थन नहीं करता है या इसकी अनुमति नहीं देता है (जिस स्थिति में chmodतुरंत बाद में भी विफल हो जाएगा)। साथ ही, 777परहेज करना चाहिए। सभी उपयोगकर्ताओं द्वारा इसे पठनीय, लिखने योग्य और निष्पादन योग्य बनाने की कोई आवश्यकता नहीं है; अगर यह थे चलाने के लिए आवश्यक chmodहै, तो chmod +x a.outपर्याप्त होगा।
एलियाह कगन

जवाबों:


33

चूंकि आप वर्तमान कार्यशील निर्देशिका में निष्पादन योग्य चल रहे हैं, इसलिए आपको इसके साथ उपसर्ग करना चाहिए ./। तो अपने कार्यक्रम के लिए इसे चलाने के रूप में ./a.out

व्याख्या

टर्मिनल निष्पादनयोग्य के लिए खोज करता है $PATH। यह एक यूनिक्स है वातावरण चर कि सूचियों निर्देशिका प्रणाली बाइनरी युक्त (जैसे ls, echo, या gcc)। आप एक निष्पादन योग्य है कि फोन तो नहीं एक में $PATHनिर्देशिका (जैसे a.out), आप फाइल सिस्टम में इसकी निरपेक्ष पथ से संकेत मिलता है की जरूरत है।

टर्मिनल .में वर्तमान काम कर रहे निर्देशिका के लिए एक पर्याय है ./a.out। आप समान रूप से अच्छी तरह से कॉल कर सकते हैं /home/yihang/Documents/a.out


1
इस पर आगे विस्तार करने के लिए, "./" एक "यहीं", कमांड के रूप में कार्य करता है। यह थोड़ा बेमानी है, लेकिन इस अर्थ में उपयोगी है कि आप जानते हैं कि आप कुछ निष्पादित कर रहे हैं।
रूबेन बकर

1
आपको chmod u+x a.outसिस्टम को निष्पादित करने की अनुमति देने की भी आवश्यकता हो सकती है।
चार्लीब्रिज

अब मैं इसे "./" के साथ प्राप्त करता हूं। कार्यक्रम बिना चोद के ठीक चलता है। धन्यवाद।
यिहानघो

1
@ अयंग: कृपया इस सवाल का जवाब देने के लिए विचार करें कि आपको सबसे अधिक पसंद किए गए उत्तर के बाईं ओर ग्रे / ग्रीन सर्कल पर क्लिक करके।
राफेल सिएलाक

@ रूबेन बकर: वास्तव में, यह बिल्कुल बेमानी नहीं है। विंडोज के विपरीत, लिनक्स वर्तमान, या डिफ़ॉल्ट, निर्देशिका में देखने के लिए डिफ़ॉल्ट नहीं है। इसलिए, यदि यह मार्ग में नहीं है, तो आपको निर्देशिका को निर्दिष्ट करने की आवश्यकता है, चाहे वह कुछ भी हो।
मार्टी फ्राइड

9

जब आप लिनक्स पर कमांड चलाते हैं PATHतो यह पर्यावरण चर में सूचीबद्ध सभी निर्देशिकाओं को खोजता है , और यदि यह वहां कमांड नहीं खोजता है , तो आपको वह संदेश मिलता है जो आपने देखा है।

आमतौर पर ऐसा दिखता है:

PATH=/usr/local/bin:/usr/bin:/bin

इसका मतलब है कि यह सबसे पहले दिखेगा /usr/local/bin। अगर यह नहीं मिलता है तो यह वहाँ /usr/binऔर इसी तरह दिखेगा ।

वास्तव में, यह डॉस / विंडोज पर बहुत समान है: एक चर है जिसे कहा जाता %PATH%है बिल्कुल वही काम करता है।

अंतर यह है कि, विंडोज पर, वर्तमान निर्देशिका भी खोजा जाता है। यूनिक्स इसे बुरा मानता है क्योंकि एक स्थानीय फ़ाइल (जैसे मैलवेयर) गलती से महत्वपूर्ण सिस्टम प्रोग्राम को ओवरराइड कर सकती है।

यदि आप पसंद करते हैं कि यद्यपि, आप .पथ को जोड़कर लिनक्स को उसी तरह से काम कर सकते हैं :

PATH=.:$PATH

(यह कहते हैं कि मौजूदा सामग्री PATHको .:प्लस पर सेट करें $PATH।)

यह कुछ इस तरह दिखता है (यह आपकी मशीन पर अलग हो सकता है):

PATH=.:/usr/local/bin:/usr/bin:/bin

यदि आप ऐसा नहीं करते हैं, तो आप स्पष्ट रूप से निर्देशिका निर्दिष्ट करके प्रत्येक कार्यक्रम चला सकते हैं:

./myprog

या

/home/username/myprog

2
यदि आप जोड़ते .हैं PATH, तो हमेशा इसे अंतिम जोड़ें।
मूरू

3

मूलतः, a.out डिफ़ॉल्ट रूप से बनाया जाता है क्योंकि आपने निष्पादन योग्य के लिए कोई नाम निर्दिष्ट नहीं किया था। इसके बजाय यह प्रयास करें:

gcc HelloWorld.c -o HelloWorld

एक बार जब आप ऐसा कर लेते हैं, तो आपको इसे डॉट-स्लेश (./) के साथ "हेलोवर्ल्ड" के रूप में रखने के द्वारा (जैसा कि सुनील ने सुझाव दिया है) इसे लागू करने में सक्षम होना चाहिए:

./HelloWorld

यहाँ एक लेख के लिए एक लिंक दिया गया है जो इस बारे में थोड़ा सा बताता है कि a.out क्यों बनता है: लिनक्स पर लेखन और संकलन कार्यक्रम

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