'কমান্ড পাওয়া যায়নি' এর আগে `-`` ড্যাশ-এর ​​আগে ত্রুটি বলতে কী বোঝায়?


28

আপনি যখন ব্যাশ প্রম্পটে একটি অবৈধ কমান্ড প্রবেশ করেন আপনি বার্তাটি পাবেন

-bash: {command}: command not found

কি -খুব শুরু বোঝান এ?


কমান্ডটি ঠিক কীভাবে চালাচ্ছেন? আমি অনুলিপি করার চেষ্টা করেছি, তবে আমি একই ফলাফল পাচ্ছি না - যেমন> jhgjbjbkjln: command not found- -bash: সেখানে নেই। আপনি কি bashইউনিক্স, লিনাক্স, ওএসএক্স, ... ব্যবহার করছেন? আমি জিজ্ঞাসা করি কারণ সম্ভবত এটি ত্রুটি বার্তার আগে ডিফল্টরূপে একটি নির্দিষ্ট প্রয়োগের একটি বিষয় এবং এটি এর অর্থ কিছু নয় ... সম্ভবত।
জিম্ম-সিএল

@ জিম চেষ্টা করুন ssh computernameএবং অনুলিপি করতে আপনার না গণনা কমান্ড।
বার্নহার্ড

উত্তর:


27

এর অর্থ এটি লগইন শেল।

থেকে man bash:

লগইন শেল এমন একটি যার আর্গুমেন্ট শূন্যের প্রথম অক্ষর হ'ল - বা লোগো বিকল্পটি দিয়ে শুরু করা।

(ইন bashপরিভাষা, "zeroth" যুক্তি কমান্ড নাম, আপনার ক্ষেত্রে, ছিল bash।) bashযেমন নির্বাহ যেমন কার্যক্রম লগইন করতে একটি সংকেত হিসাবে এই ব্যবহার .bash_profile, ইত্যাদি

শেলটি শুরু করা থাকলে ড্যাশ স্বয়ংক্রিয়ভাবে যুক্ত হওয়ার একটি উপায় exec। থেকে ব্যাশ ম্যানুয়াল :

exec [-cl] [-a name] [command [arguments]]

[...] -lবিকল্পটি সরবরাহ করা থাকলে শেলটি কমান্ডের কাছে দেওয়া জেরোথ আর্গুমেন্টের শুরুতে একটি ড্যাশ রাখে ।

উদাহরণ

কমান্ডটি চালানোর জন্য এই দুটি প্রচেষ্টাটির সাথে তুলনা করুন nonexistent। প্রথম ছাড়াই -l:

$ exec bash
$ nonexistent
bash: nonexistent: command not found

এবং, দ্বিতীয়, সাথে:

$ exec -l bash
$ nonexistent
-bash: nonexistent: command not found

3
আমার মনে হয় আপনি যে দস্তাবেজটির উদ্ধৃতি দিচ্ছেন তার অংশটি আপনার ব্যাখ্যার সাথে মেলে না। exec -lকোনও ড্যাশ প্রাক-সংশোধন করার বিষয়টি এমন একটি সম্ভাব্য উপায় যা ব্যাশকে চালিত করার কারণ হতে পারে -bash, তবে এটি নিজেই বলে না যে এটি লগইন শেল, এবং খুব ভাল সম্ভাবনা রয়েছে যে ওপি একেবারেই ব্যবহার exec -lকরে নি । ডকুমেন্টেশনের যে অংশটি -bashএটির জন্য একটি লগইন শেল করে তা বলেছে "ইনভোকেশন একটি লগইন শেল এমনই যার আর্গুমেন্টের প্রথম অক্ষর হ'ল একটি - বা লোগো বিকল্পটি দিয়ে শুরু করা হয়েছে" "
এইচডিভি

@hvd, সম্মত সঠিক হলেও, এই উত্তরটি পয়েন্টটি মিস করে।
স্টাফেন চ্যাজেলাস

1
"জিরোথ আর্গুমেন্ট" bashপরিভাষা নয় , তবে ইউনিক্স কনভেনশন + সি ইনডেক্সিং: প্রতিটি প্রোগ্রাম একটি প্যারামিটার তালিকা পাস করে, যার প্রাথমিক প্রবেশদ্বারটি প্রোগ্রামের নাম এবং তারপরে যুক্তিগুলি অনুসরণ করে। যেহেতু সি অ্যারেগুলি শূন্যের সাথে সূচনা করে সূচিত করা হয়, আর্গুমেন্ট শূন্য (এটি হ'ল জিরোথ আর্গুমেন্ট) প্রোগ্রামের নাম এবং আসল আর্গুমেন্ট সূচিপত্র 1 দিয়ে শুরু হয়
সেল্টসেক

15

অন্য উত্তরটি যতদূর যায় ঠিক আছে তবে এটি উল্লেখযোগ্য যে বৈশিষ্ট্যটি ব্যাশের চেয়ে বেশি সাধারণ।

প্রাচীন কাল থেকেই, loginপ্রোগ্রামটি argv[0]যখন ব্যবহারকারীর শেলটি কার্যকর করে তখন এটি একটি ড্যাশকে বাড়িয়ে তোলে এবং শেলটি এটি একটি "লগইন শেল" হিসাবে আচরণ করা উচিত এমন একটি চিহ্ন হিসাবে স্বীকৃতি দিয়েছে। এটি এখানে ভি 7 ম্যান পৃষ্ঠাতে নথিভুক্ত করা হয়েছে: লগইন (1) , শ (1)

যে সমস্ত প্রোগ্রাম লগইন-এর মতো পরিষেবা সরবরাহ করে (কোনও ব্যবহারকারীকে প্রমাণীকরণ করে এবং শেল চালায়) তাদের "প্রিপেন্ড ড্যাশ" বিধি অনুসরণ করা উচিত। উদাহরণস্বরূপ, sshd এই মন্তব্যটির অধীনে ssh / session.c এ দেখতে পাবে :

/*
 * If we have no command, execute the shell.  In this case, the shell
 * name to be passed in argv[0] is preceded by '-' to indicate that
 * this is a login shell.
 */

সমস্ত শেল নেতৃস্থানীয় ড্যাশ সনাক্ত করে। সমতুল্য -lবিকল্পটি ক্লাসিক বোর্ন শেল বা মূল সিএসএসে বিদ্যমান নেই, তবে বেশিরভাগ নতুন শেল (বাশ, ড্যাশ, কেএস, যশ, টিসিএস, জেডএস, আরসি, এসিস, ফিশ এবং সিএসএসের কোনও আধা-সাম্প্রতিক সংস্করণ) এতে রয়েছে।


2
যদিও এখন বেশিরভাগ শেলের -lবিকল্প রয়েছে, loginতবুও এটি ব্যবহার করে না। সমস্ত শেলগুলি argv[0]"অফিসিয়াল" প্রক্রিয়া হিসাবে উপসর্গটি স্বীকৃত হবে বলে আশা করা হচ্ছে ।
বার্মার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.