'कमांड नहीं मिला' त्रुटियों पर `बाश 'से पहले पानी का छींटा` -` क्या मतलब है?


28

जब आप बैश प्रॉम्प्ट पर एक अमान्य कमांड दर्ज करते हैं तो आपको संदेश मिलता है

-bash: {command}: command not found

-बहुत शुरुआत में क्या दर्शाता है?


आप वास्तव में कमांड कैसे चला रहे हैं? मैंने दोहराने की कोशिश की, लेकिन मुझे वही परिणाम नहीं मिल रहे हैं - उदाहरण> jhgjbjbkjln: command not found- -bash: वहाँ नहीं। क्या आप bashयूनिक्स, लिनक्स, OSX, ... में उपयोग कर रहे हैं ? मैं पूछता हूं क्योंकि शायद यह डिफ़ॉल्ट रूप से त्रुटि संदेश से पहले एक विशिष्ट कार्यान्वयन है, और इसका कोई मतलब नहीं है ... शायद।
जिम्मी-क्ल

@jim कोशिश करें ssh computernameऔर अपने को दोहराने के लिए कमांड न गिनें ।
बर्नहार्ड

जवाबों:


27

इसका मतलब है कि यह एक लॉगिन शेल है।

से man bash:

एक लॉगिन शेल वह है जिसका तर्क शून्य का पहला वर्ण a - है, या एक - thelogin विकल्प के साथ शुरू हुआ है।

( bashशब्दावली में, "शून्य" तर्क वह कमांड नाम है, जो आपके मामले में था 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 को चलाया जा सकता है -bash, लेकिन वह स्वयं यह नहीं कहता है कि यह एक लॉगिन शेल है, और एक बहुत अच्छा मौका है कि OP का उपयोग बिल्कुल नहीं किया exec -lगया है । प्रलेखन का हिस्सा जो कहता -bashहै कि यह एक लॉगिन शेल है, "INVOCATION एक लॉगिन शेल वह है जिसका तर्क शून्य का पहला वर्ण है a -, या एक - thelogin विकल्प के साथ शुरू हुआ है।"
hvd

@hvd, सहमत। हालांकि सही है, यह उत्तर बिंदु को याद करता है।
स्टीफन चेज़लस

1
"द ज़रोथ तर्क" bashशब्दावली नहीं है, लेकिन यूनिक्स सम्मेलन + सी अनुक्रमण: प्रत्येक कार्यक्रम को एक पैरामीटर सूची दी जाती है, जिसकी प्रारंभिक प्रविष्टि कार्यक्रम का नाम है, जिसके बाद तर्क होते हैं। चूंकि सी सरणियों को शून्य से शुरू किया जाता है, तर्क शून्य (अर्थात, ज़रोथ तर्क) प्रोग्राम का नाम है, और वास्तविक तर्क सूचकांक 1 से शुरू होते हैं
celtschk

15

जहां तक ​​यह जाता है, अन्य उत्तर ठीक है, लेकिन यह ध्यान देने योग्य है कि यह सुविधा बैश की तुलना में अधिक सामान्य है।

प्राचीन काल से, loginकार्यक्रम ने argv[0]उपयोगकर्ता के शेल को निष्पादित करने के लिए एक डैश तैयार किया है , और शेल ने इसे एक संकेत के रूप में मान्यता दी है कि इसे "लॉगिन शेल" के रूप में व्यवहार करना चाहिए। इसे यहां V7 मैन पेजों में दर्ज किया गया है: लॉगिन (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विकल्प क्लासिक बॉर्न शेल या मूल csh में मौजूद नहीं है, लेकिन अधिकांश नए गोले (bash, डैश, ksh, yash, tsh, zsh, rc, es, मछली और csh के किसी भी अर्ध-हाल के संस्करण) में मौजूद हैं।


2
भले ही अधिकांश गोले अब -lविकल्प हैं, फिर loginभी इसका उपयोग नहीं करता है। सभी गोले को argv[0]"आधिकारिक" तंत्र के रूप में उपसर्ग को पहचानने की उम्मीद है ।
बरमार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.