टर्मिनल शो> दर्ज करने के बाद \


26

जब मैं बैकस्लैश दबाता हूं \, तो मुझे एक >(अधिक से अधिक) प्रतीक दिया जाता है । इसका क्या मतलब है?


4
यह एक लाइन निरंतरता का संकेत है।
रोबॉटहूमन

जवाबों:


35

जब भी आप कमांड लाइन का उपयोग करते हैं, तो एक उदाहरण हो सकता है जब आपको एक कमांड चलाने की आवश्यकता होती है जो बहुत लंबा है। इसलिए, आप बेहतर पठनीयता और समझ के लिए कमांड को कई लाइनों में विभाजित करना चाहते हैं। लेकिन अगर आप नई लाइन कैरेक्टर का उपयोग करते हैं Enter, जो टाइप किया जाता है , तो शेल यह सोचेगा कि यह एक नया कमांड है। इसलिए आप \न्यूलाइन कैरेक्टर को फॉलो करें।

मूल रूप से, कमांड या बैश स्क्रिप्ट "व्याख्यायित" हैं, अर्थात लाइन द्वारा निष्पादित लाइन। प्रत्येक नई पंक्ति का अर्थ है एक नई कमांड की शुरुआत। टर्मिनल में, जब आप दबाते हैं Enter, तो आपको एक नया कमांड चलाने के लिए संकेत मिलता है। तो, एक नई लाइन "बच" की जरूरत है। \इसके बाद टाइप करना Enterआपको वर्तमान कमांड को कई लाइनों में विभाजित करने की अनुमति देता है ताकि शेल यह न सोचें कि यह एक नई कमांड है लेकिन पिछले कमांड की निरंतरता है।

> आदेश की अगली पंक्ति के लिए एक संकेत के अलावा कुछ भी नहीं है।

उदाहरण के लिए:
यदि हम कई पैकेजों को स्थापित करना चाहते हैं, तो कमांड की तरह होगा

$ sudo apt install [package1] [package2] [package3] ...

लेकिन कभी-कभी, यह आदेश को अव्यवस्थित कर देता है। तो हम (newline character) \द्वारा उपयोग कर सकते हैंEnter

$ sudo apt install [package1]\
> [package2]\
> [package3]\
> ...

4
@Curiouskangaroo BTW, आप नियंत्रित कर सकते हैं कि नई कमांड और लाइन निरंतरता कैसे काम करती है, $PS1और $PS2चर को मान सेट करके । प्रारूप सीखने के लिए बैश मैन पेज देखें, और echo "'$PS2'"वर्तमान सेटिंग को देखने के लिए उपयोग करें।
jpaugh

14

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

उदाहरण:

$ echo A\
> B
AB
$

\अपनी आज्ञा को शाब्दिक रूप से रखने के लिए, आपको एक और बैकस्लैश का उपयोग करके इसे बचाना होगा:

$ echo \\
\
$

7

[(अन्य बहुत लंबा / जटिल) उत्तर जोड़ते हुए अन्य 2 का उल्लेख नहीं है कि ">" कैसे प्रकट होता है ... अर्थात, PS2 का उल्लेख न करें]

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

आपका टर्मिनल इसलिए व्याख्या \Enterकरता है: "अगली पंक्ति पर जाएं" (कमांड की व्याख्या शुरू किए बिना) और इस प्रकार टर्मिनल अब आपको मल्टी-लाइन कमांड की दूसरी पंक्ति में प्रवेश करने देता है, और इसे और अधिक दृश्यमान बनाने के लिए $PS2सामग्री प्रदर्शित करता है ( प्रत्येक बाद की पंक्ति पर PS2 संकेत ) कहा जाता है ।

पीएस 2 चर आमतौर पर के रूप में डिफ़ॉल्ट रूप से परिभाषित किया गया है: PS2="> "उदाहरण के लिए आप कर सकते हैं और संपादित करें अपने ~ / .bashrc यह फिर से परिभाषित करने के रूप में आप चाहते हैं (ध्यान में रखते हुए यह, imo, से रोकने के लिए खतरनाक वर्ण, युक्त होना चाहिए कि >या ;, और तुम मदद करनी चाहिए या तो स्पष्ट रूप से यह एक बहु आदेशों है देखते हैं लेकिन यह है को निष्क्रिय बहु सामग्री (पूर्व: PS2="#cont#") के साथ या आप आसानी से कॉपी करते हैं / पेस्ट उन्हें जितना संभव हो सके अपने तर्ज पर थोड़ा प्रभाव के रूप में (पूर्व: PS2=" ")

जो, वैसे, एक खराब डिफ़ॉल्ट है, क्योंकि यह कुछ मामलों में कुछ महत्वपूर्ण बाइनरी कमांड को हटाने के लिए बहुत अच्छी तरह से नेतृत्व कर सकता है।

आप PS2 को कुछ और होने के लिए फिर से परिभाषित कर सकते हैं (मुझे पसंद है: PS2 = "", छूट के लिए) ताकि बहुउद्देशीय आदेशों को आसानी से कॉपी / पेस्ट किया जा सके, बिना निम्नलिखित डर के:

उदाहरण के लिए मान लें कि आपके पास एक कमांड है जो काफी लंबी होने लगती है (और यदि आपका टर्मिनल पर्याप्त चौड़ा नहीं है तो आपकी स्क्रीन पर फोल्ड हो सकता है):

grep -i "something"  /some/file  /another/file /3rd/file /etc/someimportantfile 

यदि आदेश बहुत लंबा दिखता है (और चारों ओर लपेटता है), तो आप इसे नेत्रहीन रूप से 2 लाइनों में विभाजित करना चाहते हैं, जहां (जब) ​​आप सम्मिलित करके अगली पंक्ति में चाहते हैं: \Enterउचित स्थान पर

grep -i "something"  /some/file  /another/file /3rd/file \
> /etc/someimportantfile #warning, "> " was inserted by the shell and this changes everything !

डिफ़ॉल्ट PS2 का उपयोग करते हुए, शेल को ">" से पहले "/ etc / someimportantfile" जोड़ा गया है .. इसलिए यदि आप उन 2 लाइनों को किसी अन्य टर्मिनल में कॉपी / पेस्ट करते हैं, तो उनकी कार्रवाई पूरी तरह से अलग होगी: 4 फ़ाइलों में grep करने के बजाय, gpp है केवल पहली 3 फाइलों में जा रहा है, और grep आउटपुट 4 वें फ़ाइल (/ etc / someimportantfile) की सामग्री को बदल देता है!

इन समस्याओं (और कई अन्य) से बचने के लिए: आप को परिभाषित करने के लिए कर सकते हैं: PS2=" "मल्टी-लाइन कमांड को क्लीनर और कॉपी / आसान बनाने के लिए:

grep -i "something"  /some/file  /another/file /3rd/file \
  /etc/someimportantfile #now only 2 spaces were inserted, without changing the grep's actions!

ध्यान दें कि इस बार / बिन / सोमसेमैंड सही ढंग से शिफ्टर 2 रिक्त स्थान है, और कोई ">" नहीं डाला गया था, इसलिए आप इस 2-लाइन कमांड को सुरक्षित रूप से कॉपी / पेस्ट कर सकते हैं।

PS2 का उपयोग "के लिए" "" जबकि "लूप्स" में भी किया जाता है, और इसे "" के रूप में परिभाषित किया गया है, मेरे लिए, उन लोगों में भी बेहतर है।

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