Cd `(बैकटिक) का उद्देश्य क्या है?


57

निम्नलिखित Fedora और CentOS में समान व्यवहार करता है।

cd mydirectory

काम करता है।

cd notadirectory

काम करता है (बैश से एक त्रुटि मिलती है)।

हालाँकि,

cd `

मुझे शीघ्र कुछ प्रकार देता है:

>

कुछ भी नहीं मैंने सोचा है कि कोई भी प्रतिक्रिया देता है, यह फिर से संकेत देने के लिए अगली पंक्ति में जाता है मैं बस वापस जाने के लिए CTRL+ Cका उपयोग करता हूं root@localhost

इसका उद्देश्य क्या है और इससे कोई क्या कर सकता है?

धन्यवाद!



6
इसलिए आपका सवाल >बैकटिक के बारे में की तुलना में अधिक है , क्योंकि यह अन्य स्थितियों में भी हो सकता है
टोबियास किंजलर

जवाबों:


124

आपने जो टाइप किया है, वह एक बैकटिक है - यह एक निर्देश के रूप में कि आप एक कमांड के रूप में क्या टाइप करते हैं, का मूल्यांकन करने के लिए बैश कर सकते हैं। यह >इंगित करने के लिए प्रदर्शित किया जाता है कि आप अभी भी अगली पंक्ति में कमांड दर्ज कर रहे हैं।

यदि आप बैकटिक को बंद करते हैं तो आप पाएंगे कि पूरा कमांड चलेगा। उदाहरण के लिए

~$ cd `
> echo /var`
/var$

17
आप उन्हें घोंसला भी दे सकते हैं। कुछ हद तक यथार्थवादी उदाहरण के लिए: cd `dirname \`which ls\``= cd निर्देशिका के लिए जहाँ "ls" बाइनरी स्थित है। (यानी cd /binजब से यह है /bin/ls) [संपादित करें: भाई, उस
मार्कशीट से बचना

54
@ दलाल आप शायद इस कारण से लड़खड़ा गए हैं कि आधुनिक बैश क्यों पसंद करते $()हैं ``। आपका उदाहरण (प्लस सही उद्धरण) बन जाएगा cd "$(dirname "$(which ls)")"जो बहुत कम पागल है।
मुजेर

31
@Muzer यह न केवल बैश है जो इसे पसंद करता है, बल्कि यह बैकस्कॉट्स का उपयोग करने के लिए POSIX विनिर्देशन में अनुशंसित है$()
स्टारफिश

59

जॉनसी का जवाब पहले से ही बैकटिक बताता है। लेकिन जिस चीज के बारे में आप भी सोच रहे हैं, वह >प्रॉम्प्ट है। यह एक निरंतरता संकेत देता है, और यह न केवल एक बैकटिक द्वारा ट्रिगर किया जाता है, बल्कि हमेशा जब आपका शेल स्पष्ट रूप से जानता है कि आप एक कमांड में प्रवेश नहीं कर रहे हैं। सबसे आसान उदाहरण \एक इनपुट लाइन के अंत में एक स्पष्ट रेखा निरंतरता रख रहा है (जो लंबे इनपुट को विभाजित करने में मदद करता है):

$ echo \
> hallo

ध्यान दें कि जैसे PS1कमांड प्रॉम्प्ट के लुक को नियंत्रित करता है, आप PS2निरंतरता को बदलने के लिए भी सेट कर सकते हैं , जैसे

$ export PS2="(cont.) "
$ echo \
(cont.) hallo

निरंतरता होने के कई कारण हैं। एक एकल बैकटिक अधूरा है, लेकिन आप कुछ ऐसा भी दर्ज कर सकते हैं

ls -l `which cp`

एक ही पंक्ति में (साइड-नोट: इसका उपयोग करने की अनुशंसा की जाती है $(और )इसके बजाय, चूंकि कोष्ठक स्पष्ट करते हैं कि विस्तार कहां से शुरू होता है और समाप्त होता है, जबकि एकल बैकटिक्स यह देखना और अधिक कठिन बना देता है कि कहां गायब है और घोंसला बनाना ...)। निरंतरता के अन्य संभावित कारण

  • के doneबाद एक लापता whileयाfor
  • एक के fiबाद एक लापताif
  • एक लापता के esacबादcase
  • एक लापता समापन कोष्ठक, उदाहरण के लिए उपखंड में (cd $HOME; cat .bashrc)
  • पाइपिंग के |साथ-साथ सशर्त निष्पादन के बाद एक लापता कमांड ||और &&( &हालांकि, नहीं है क्योंकि यह केवल पृष्ठभूमि में चलने वाली कमांड बना रहा है)
  • एक लापता समापन उद्धरण ( 'या ")

पर्याप्त रूप से, एक }चर विस्तार के बाद एक लापता ब्रेस ${भी निरंतरता का कारण बनता है, लेकिन सम्मिलित स्थान के कारण विफल हो जाएगा:

$ echo ${
> PS2}
bash: ${
PS2}: bad substitution

2
और उद्धरण का उपयोग करते समय एक ही बात होती है :)
स्टीन शूट

1
मुझे इस प्रश्न का उत्तर पहले से ही पता था, जब मैंने इसे साइडबार में देखा था, लेकिन मैं आपको एक बहुत ही अच्छे उत्तर के लिए एक अतिरिक्त, यद्यपि, काल्पनिक +1 देना चाहता था। यह सामग्री का प्रकार है जो StackExchange साइटों को भयानक बनाता है। तो ... धन्यवाद और भयानक रहो।
Unwwntech

4

इसका मतलब है कि आपकी आज्ञा अभी पूरी नहीं हुई है। वास्तव में, वर्ण बैकटिक, `इनलाइन कमांड को सीमांकित करने के लिए उपयोग किया जाता है।

उदाहरण:

cd /tmp # Go to /tmp
pwd # Prints the current working  directory
ls `pwd` # Lists the content of the current working directory

0

Backtick कमांड प्रतिस्थापन शुरू / समाप्त करता है। शेल backticks के अंदर कमांड पढ़ता है, परिणामों की व्याख्या करता है, और उन परिणामों को कमांड में रखता है। उदाहरण के लिए :. ls which cpपरिणाम "किस cp" को निष्पादित किया जा रहा है और उस कमांड के परिणाम, अर्थात, / bin / cp का उपयोग ls कमांड के तर्क के रूप में किया जाएगा। हालाँकि, यह व्यवहार अधिक स्पष्ट और पठनीय $ (cmd) कमांड प्रतिस्थापन के पक्ष में पदावनत है।

जब cd टाइप कर रहा है `शेल एक कमांड को फॉलो करने के लिए निष्पादित होने की उम्मीद कर रहा है, और, बैकटिक के साथ पास होने के लिए।

चर विस्तार के मामले में ब्रेसिज़ का उपयोग करके शेल निरंतरता संकेत प्रस्तुत करता है क्योंकि विस्तार होने से पहले उन ब्रेसिज़ का शाब्दिक मूल्यांकन किया जाता है।

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