বাশ স্ক্রিপ্ট খালি লাইনে "কমান্ড খুঁজে পাওয়া যায় নি"


111

আমি যখনই bash scriptname.shডবিয়ানে কমান্ড লাইনটি ব্যবহার করে স্ক্রিপ্ট চালাই , তখন আমি Command Not foundস্ক্রিপ্টের ফলাফল পাই ।

স্ক্রিপ্টটি কাজ করে তবে Command Not Foundপ্রতিটি খালি লাইনের জন্য স্ক্রিনে সর্বদা একটি বিবৃতি মুদ্রিত থাকে। প্রতিটি ফাঁকা রেখার ফলস্বরূপ একটি আদেশ পাওয়া যায় নি।

আমি /varফোল্ডারটি থেকে স্ক্রিপ্টটি চালাচ্ছি ।

লিপিটি এখানে:

#!/bin/bash

echo Hello World

আমি নিম্নলিখিত টাইপ করে এটি চালান:

bash testscript.sh

কেন এমন হবে?


গুরুতরভাবে, নেট এই ধরনের অভিযোগ পূর্ণ। শেল খুব দুর্বল এবং খোঁড়া দোভাষী। সামান্য এখানে এবং সেখানে এবং এটি ব্যর্থ হয়। আপনি স্ক্রিপ্টে এমনকি সমস্ত সাদা স্পেস দেখতে পেয়েছেন। আমার স্ক্রিপ্টটি অদৃশ্য লাইন ফিড চরিত্রের কারণে ব্যর্থ হয়েছিল। সম্ভবত এটি কেবল স্ক্রিপ্টিং ভাষা যেখানে সাদা স্পেসগুলি গণনা করে!
অতুল

1
bash -x scriptname.shত্রুটিটি সনাক্ত করতে ব্যবহার করুন । - আমার ক্ষেত্রে এটি ভিএসকোডের সাথে উইন্ডোজের অধীনে সংরক্ষিত একটি sh-ফাইল এবং "CRLF" হিসাবে লাইন শেষ ছিল। নীচের ডান কোণে ভিএসকোডে আপনি লাইন টার্মিনেটরটি "সিআরএলএফ" থেকে "এলএফ" তে পরিবর্তন করতে পারবেন। এই ফাইলটি আপলোড হয়েছে এবং শেষ পর্যন্ত এটি কার্যকর করতে পারে bash scriptname.sh
কাই নোক

এটি অবশ্যই স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 95৯৫২757171১ / এর সদৃশ। তবে এখানে অনেক উত্তর বিভিন্ন কারণে ব্যাখ্যা করে যেখানে আপনি অন্যান্য কারণে "কমান্ড পাওয়া যায় নি" get আপনার সমস্যাটি যদি খালি লাইন সম্পর্কে বিশেষভাবে না হয় তবে দর্শকদের সমস্ত উত্তর পড়তে পরামর্শ দেওয়া হচ্ছে।
ট্রিপলি

উত্তর:


161

আপনার প্রথম লাইনটি নিশ্চিত করুন:

#!/bin/bash

যদি তা না হয় তবে আপনার প্যাসে প্রবেশ করুন /bin/bash


চালানোর চেষ্টা করুন:

dos2unix script.sh

যে উইন্ডো থেকে লাইন এন্ডিং ইত্যাদি উইন্ডোজ থেকে ইউনিক্স ফর্ম্যাটে রূপান্তর করতে পারে। অর্থাত্ এগুলি থেকে পরিবর্তিত করার জন্য এটি লাইন শেষ থেকে from r (সিআর) কেটে \r\n (CR+LF)দেয় \n (LF)

dos2unixকমান্ড সম্পর্কে আরও বিশদ (ম্যান পৃষ্ঠা)


আপনার ফাইলটি ডস / উইন ফর্ম্যাটে আছে কিনা তা জানার আর একটি উপায়:

cat scriptname.sh | sed 's/\r/<CR>/'

আউটপুটটি এরকম কিছু দেখবে:

#!/bin/sh<CR>
<CR>
echo Hello World<CR>
<CR>

এটি ফাইলের <CR>প্রতিটি \rঅক্ষরের জন্য প্রদর্শিত সমস্ত ফাইল পাঠ্যকে আউটপুট দেবে ।


যেহেতু তিনি সরাসরি এটি নিয়ে চালাচ্ছেন এটি সম্ভবত প্রয়োজন নয় bash scriptname.sh(তবে এটি এখনও ভাল অনুশীলন অবশ্যই)।
paxdiablo

1
হাই #! / বিন / বাশ আমার স্ক্রিপ্টের প্রথম লাইন
ডেভিড

1
@ শাউন - ম্যাকের ক্ষেত্রেও আমার একই সমস্যা ছিল। আমি এই পোস্ট জুড়ে হোঁচট খেয়েছি। আমি নিশ্চিত নই যে এটি ওপিকে সাহায্য করেছে কিনা। তবে আপনার সমাধান আমাকে সাহায্য করেছিল।
প্রশান্ত

1
ধন্যবাদ। এটি হ'ল আমি ঠিক সমস্যার মুখোমুখি হয়েছি। এই উত্তরগুলি এটি কাজ করে।
স্লেয়েডব্লিউসিফার

5
আপনি ড্রাইভিং চলাকালীন একটি প্রোগ্রামিং প্রশ্নের উত্তর কীভাবে লিখতে পারেন?
ওমর তারিক

61

আপনি bash -x scriptname.shএটি ট্রেস করতে ব্যবহার করতে পারেন ।


47

আমিও একই জাতীয় ইস্যুতে দৌড়েছি। ইস্যুটি অনুমতির বলে মনে হচ্ছে। আপনি যদি এটি করেন তবে ls -lআপনি সনাক্ত করতে সক্ষম হতে পারেন যে আপনার ফাইলের এক্সিকিউট বিট চালু নাও থাকতে পারে। এটি স্ক্রিপ্টটি কার্যকর করতে অনুমতি দেবে না। :)

যেমন @ আর্টুরো মন্তব্যটিতে যুক্ত করেছেন:

সমস্যা সমাধানের জন্য chmod +x testscript.sh


4
এই সমস্যাটি চালানোর জন্য রান করুনchmod +x testscript.sh
আর্টোরো

এটি আমার পক্ষে কাজ করে এমন উত্তর ছিল, সর্বদা আমাকে জানানো হয়েছিল যে আমার অনুমতি নেই, তাই আমি এটি করেছি এবং কমান্ডটি পাওয়া যায়নি বলে জানিয়েছিলাম। আমি অনুমতিগুলি পরীক্ষা করার জন্য ভাবি নি।
ডায়মন্ডড্রেক

1
Lypso345 ধন্যবাদ, এটি আমার যে সমস্যাটি ছিল তা সমাধান করেছে।
ammills01

chmod 777 testcript.sh FTW
জেনকোড

16

এটি অপ্রয়োজনীয় এবং ওপি-র প্রশ্নের সাথে সম্পর্কিত নয়, তবে স্ক্রিপ্টিং শিখতে গিয়ে আমি প্রায়শই শুরুতে এই ভুলটি করেছিলাম

VAR_NAME = $(hostname)
echo "the hostname is ${VAR_NAME}"  

এটি 'কমান্ড পাওয়া যায়নি' প্রতিক্রিয়া তৈরি করবে। সঠিক উপায় হ'ল স্পেসগুলি মুছে ফেলা

VAR_NAME=$(hostname)

11

যদি স্ক্রিপ্টটি এর কাজটি (তুলনামূলকভাবে) ভাল করে, তবে এটি ঠিক আছে। আপনার সমস্যাটি সম্ভবত ফাইলটির একক লাইন যা কোনও প্রোগ্রামকে উল্লেখ করে যা পথে হয় না, ইনস্টল করা হয়নি, ভুল বানান বা এরকম কিছু।

একটি উপায় হ'ল set -xআপনার স্ক্রিপ্টের শীর্ষে একটি স্থাপন করা বা এটির bash -xপরিবর্তে এটি চালানো bash- এটিগুলি কার্যকর করার আগে লাইনগুলি আউটপুট দেয় এবং সমস্যাটি কী ঘটছে তা দেখার জন্য আপনাকে সাধারণত ত্রুটি করার আগে অবিলম্বে কমান্ড আউটপুটটি দেখতে হবে see

যদি আপনি বলে, এটা ফাঁকা রেখা সমস্যা সৃষ্টি হয়, আপনি কি actaully চেক করতে চাইবেন এর মধ্যে তাদের। চালান:

od -xcb testscript.sh

এবং নিশ্চিত করুন যে CTRL-Mউইন্ডোজ-টাইপ এডিটর ব্যবহার করে আপনি যে (ক্যারিজ রিটার্ন) পেতে পারেন তার মতো কোনও "অদৃশ্য" মজাদার অক্ষর নেই ।


'ওড' কমান্ডের জন্য +1! এটা দুর্দান্ত, আমি সে সম্পর্কে জানতাম না! ধন্যবাদ!
chown

11

উইন্ডোজের জন্য ব্যাশ অন চালানোর জন্য আমি ভুলভাবে চেষ্টা করেছি

run_me.sh 

শুরুর দিকে ./ ছাড়া এবং একই ত্রুটি পেয়েছে।

উইন্ডোজ পটভূমির লোকদের জন্য সঠিক ফর্মটি অপ্রয়োজনীয় দেখায়:

./run_me.sh



6

কার্যকর করার জন্য যে আপনাকে অবশ্যই এর পুরো পথ সরবরাহ করতে হবে

/home/Manuel/mywrittenscript

প্রকৃতপক্ষে, শেলটি ফাইল এক্সটেনশনগুলির মোটেই যত্ন করে না। নিশ্চিত নয় যে এই যোগ্যতাগুলি পৃথক উত্তর হিসাবে পোস্ট করা হচ্ছে।
ট্রিপলি

অবশ্যই লিনাক্স ফাইল সিস্টেমটি উইন্ডোজ এক্সটেনশনের বিপরীতে কেবল নামের অংশ হিসাবে ব্যবহৃত হয় এবং ফাইলের বিষয়বস্তু সম্পর্কে কিছুই বলে না I আমি অবশ্যই আমার ক্ষেত্রে সীমাবদ্ধতা বলব না
মাসুদ মোগিনী

6

যদি আপনার নোটপ্যাড ++ থাকে এবং আপনি এটি .sh ত্রুটি বার্তা পান: "কমান্ড পাওয়া যায় নি" বা এই স্বতঃসিদ্ধ ত্রুটি বার্তা "লাইন 615: ../../autoconf/bin/autom4te: এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই"

আপনার নোটপ্যাড ++ এ, সম্পাদনা -> EOL রূপান্তর এ যান তারপরে ম্যাকিথনস (সিআর) দেখুন । এটি আপনার ফাইলগুলি সম্পাদনা করবে। আমি এই আদেশ দিয়ে সমস্ত ফাইল চেক করতে উত্সাহিত করি, কারণ শীঘ্রই এ জাতীয় ত্রুটি ঘটবে।


এর জন্য ধন্যবাদ. আমার ক্ষেত্রে আমি ব্যস্তবক্স লিনাক্স ডিস্ট্রোতে স্ক্রিপ্ট চালাচ্ছিলাম। আমার স্ক্রিপ্টগুলির সমস্ত খালি লাইনে একই ত্রুটি ছিল "পাওয়া যায় নি"। / অন্য বিবৃতিতে এটিতেও সমস্যা ছিল। EOL নোটপ্যাড ++ এ ইউনিক্সে পরিবর্তন করে এটি স্থির করে।
জেনকোড

4

একই সমস্যা ছিল। দুর্ভাগ্যবশত

dos2unix winfile.sh
bash: dos2unix: command not found

সুতরাং আমি রূপান্তর করতে এটি করেছি।

 awk '{ sub("\r$", ""); print }' winfile.sh > unixfile.sh

এবং তারপর

bash unixfile.sh

2

চলমান স্ক্রিপ্টগুলির সমস্যাগুলি মাল্টি-লাইন কমান্ডগুলির খারাপ ফর্ম্যাটিংয়ের সাথেও সংযুক্ত থাকতে পারে, উদাহরণস্বরূপ যদি লাইন-ব্রেকিং "\" এর পরে যদি আপনার একটি সাদা জায়গা থাকে। যেমন:

./run_me.sh \ 
--with-some parameter

(দয়া করে "\" এর পরে অতিরিক্ত স্থানটি নোট করুন) সমস্যার সৃষ্টি করবে তবে আপনি যখন সেই স্থানটি সরিয়ে ফেলবেন তখন এটি পুরোপুরি ঠিকঠাক চলবে।


0

আমি কিছু ছিল Cannot execute command। সবকিছু সঠিক দেখাচ্ছিল, তবে বাস্তবে &nbsp;আমার আদেশের ঠিক আগে আমার একটি ব্রেক-ব্রেকযোগ্য জায়গা ছিল যা খালি চোখে দেখা অসম্ভব ছিল:

if [[ "true" ]]; then
  &nbsp;highlight --syntax js "var i = 0;"
fi

যা, ভিমে, দেখতে দেখতে:

if [[ "true" ]]; then
  highlight --syntax js "var i = 0;"
fi

বাশ স্ক্রিপ্ট চেকার চালানোর পরেই shellcheckআমি সমস্যাটি খুঁজে পেলাম।


shellcheckঅন-লাইন উপলভ্য, যদিও আপনাকে অবশ্যই অবশ্যই আপনার স্ক্রিপ্টটি অনুলিপি করতে হবে যাতে সাহায্যের জন্য। শেলচেক.নাট
ট্রিপলি

0

আমি আজ এটিতে ছুটে গেছি, নির্লিপ্তভাবে ডলার কমান্ড প্রম্পটটি $(কমান্ড স্ট্রিংয়ের আগে) অনুলিপিটিতে অনুলিপি করে ।


-1

বর্তমান ডিরেক্টরিতে থাকা, কেবলমাত্র তার নাম লিখে টাইপ করে কোনও স্ক্রিপ্ট কার্যকর করতে সক্ষম হতে PATH এ বর্তমান ডিরেক্টরি (।) যোগ করুন:

PATH=.:$PATH

1
এটি একটি সুরক্ষিত দুর্বলতা হিসাবে বিবেচিত হয়। আপনার পাঠাতে যাবেন না .
gniourf_gniourf

কেন এই "উত্তর" একটি খারাপ ধারণা উপর ব্যাখ্যা superuser.com/questions/156582/...
jmng

-1

আপনি যে কমান্ডটি প্রবেশ করছেন সেটিকে স্বীকৃতি দেওয়ার জন্য আপনি আপনাকে .bashrc এবং .bash_profile ফাইলের নতুন নামগুলি আপডেট করতে চাইতে পারেন।

.bashrc এবং .bash_profile ফাইলগুলি সম্ভবত আপনার সি: ড্রাইভে অবস্থিত লুকানো ফাইল যা আপনি নিজের প্রোগ্রাম ফাইলগুলি সংরক্ষণ করেন।

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