আমার প্রোগ্রামটি "কমান্ড খুঁজে পাওয়া যায়নি" ত্রুটি দিয়ে চলতে পারে না


14

আমি সবেমাত্র উইন্ডোজ থেকে উবুন্টু ১১.১০ তে স্যুইচ করেছি।

আমি টেক্সট সম্পাদকের সাহায্যে সিটিতে নিম্নলিখিত কোডটি লিখেছি এবং এটি ডকুমেন্টগুলিতে হ্যালো ওয়ার্ল্ড সি হিসাবে সংরক্ষণ করেছি।

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

এবং আমি টার্মিনালটি শুরু করে নিম্নলিখিত কমান্ডগুলি প্রবেশ করলাম:

cd Documents

gcc HelloWorld.c

A.out নামে একটি ফাইল, যা গুগলে কিছু অনুসন্ধানের পরে কার্যকর হয়। আমি এই আদেশটি প্রবেশ করলাম:

a.out

তবে আমি পেয়েছি

a.out: command not found

আমি কোন পদক্ষেপটি ভুলভাবে করেছি?


এটি কার্যকর করার জন্য, ব্যবহার করতে ভুলবেন নাsudo chmod 777 a.out
নিক শোভেলিডজে

@ নিকশিলিডিজে সংকলকরা +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
এটিকে আরও বিশদভাবে জানাতে, "./" কমান্ডটি "এখানে ঠিক আছে" হিসাবে কাজ করে। এটি কিছুটা অপ্রয়োজনীয়, তবে এই অর্থে কার্যকর যে আপনি জানেন যে আপনি কোনও কিছু সম্পাদন করবেন।
রুবেন বেকার 12

1
chmod u+x a.outসিস্টেমটি এটি কার্যকর করতে অনুমতি দেওয়ার প্রয়োজন হতে পারে।
চার্লসব্রিজ

এখন আমি এটি "./" দিয়ে পেয়েছি। Chmod ছাড়াই প্রোগ্রামটি ভালভাবে চলে। ধন্যবাদ।
ইয়েহাঁহো

1
@ আইহ্যাং: দয়া করে আপনার সবচেয়ে বেশি পছন্দ হওয়া উত্তরটির বাম দিকে ধূসর / সবুজ বৃত্তটি ক্লিক করে এই প্রশ্নের উত্তর হিসাবে চিহ্নিত করতে দয়া করে বিবেচনা করুন।
রাফা সিলেক

@ রুবেন বাকের: আসলে, এটি মোটেও নিরর্থক নয়। উইন্ডোজ থেকে ভিন্ন, লিনাক্স বর্তমান বা ডিফল্ট ডিরেক্টরিটি সন্ধান করতে ডিফল্ট হয় না। সুতরাং, যদি এটি পথে না থাকে তবে আপনাকে ডিরেক্টরিটি যা প্রয়োজন তা নির্দিষ্ট করে দেওয়া দরকার।
মার্টি ফ্রাইড

9

আপনি যখন লিনাক্সে কমান্ডগুলি চালনা করেন এটি PATHপরিবেশের ভেরিয়েবলের তালিকাভুক্ত সমস্ত ডিরেক্টরি অনুসন্ধান করে এবং যদি সেখানে কমান্ডটি খুঁজে না পায় তবে আপনি যে বার্তাটি দেখেছেন তা পেয়ে যান।

সাধারণত এটি দেখতে এটির মতো লাগে:

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

তার মানে এটি প্রথম দেখবে /usr/local/bin। এটি যদি এটি সেখানে না পাওয়া যায় তবে এটি সন্ধান করবে /usr/bin, ইত্যাদি।

প্রকৃতপক্ষে, ডস / উইন্ডোজ এ এটি খুব অনুরূপ: একটি পরিবর্তনশীল বলা হয় %PATH%যা ঠিক একই জিনিসটি করে।

পার্থক্য যে, Windows এ, বর্তমান ডিরেক্টরির এছাড়াও অনুসন্ধান করা হয়। ইউনিক্স এটিকে খারাপ বলে বিবেচনা করে কারণ একটি স্থানীয় ফাইল (যেমন ম্যালওয়্যার) দুর্ঘটনাক্রমে গুরুত্বপূর্ণ সিস্টেম প্রোগ্রামগুলিকে ওভাররাইড করতে পারে।

আপনি যদি এটি পছন্দ করেন তবে আপনি লিনাক্সকে একই পথে যুক্ত .করতে পারেন:

PATH=.:$PATH

( এটি বিদ্যমান সামগ্রীতে প্লাস সেট PATHকরে বলেছে says ).:$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 কেন তৈরি হবে সে সম্পর্কে কিছুটা ব্যাখ্যা করেছে: লিনাক্সে সি প্রোগ্রামগুলি রচনা ও সংকলন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.