बैश प्रॉम्प्ट (PS1) को मैन्युअल रूप से सेट करने के कारण # के बजाय $ $ क्यों होता है?


11

मैं CentOS 6.4 पर हूं। डिफ़ॉल्ट रूप से रूट उपयोगकर्ता के संकेत में #प्रतीक है, अर्थात यह कुछ ऐसा दिखता है [root@myserver ~]# 

echo $PS1प्रिंट करता है [\u@\h \W]\$; लेकिन अगर मैं PS1="[\u@\h \W]\$"(जो कुछ भी नहीं बदलना चाहिए, तो), मैं एक संकेत है कि इस तरह दिखता है के साथ समाप्त होता है [root@myserver ~]$:।

जब मैं इसे स्वयं सेट करने का प्रयास करता हूं (मैं अंततः इसे कुछ और उपयोगी में बदलना चाहता हूं), तो क्या यह $शाब्दिक रूप से व्याख्या करता है ? बस हर पृष्ठ के बारे में मैं पा सकता हूं (उदाहरण के लिए, How to: Change / Setup bash कस्टम प्रॉम्प्ट (PS1) ) कहता है कि रूट उपयोगकर्ता के लिए \$परिणाम होना चाहिए #


PS1=[\u@\h \W]\$लौटता है -bash: W]$: command not found
चेरोबा

@choroba ऊप्स, सॉरी, डबल कोट्स छूट गया, ऐसा होना चाहिए था PS1="[\u@\h \W]\$"
स्ट्राइबेडर

जवाबों:


14

अपने प्रश्न में, आप का अर्थ है कि आप लाइन को बिल्कुल उद्धृत नहीं कर रहे हैं; यह स्पष्ट रूप से गलत है, क्योंकि तब स्पेस तर्क असाइनमेंट "PS1 = [\ u @ \ h" को कमांड "\ W] \ $" से अलग कर देगा। कृपया महसूस करें कि हर चरित्र महत्वपूर्ण है।

वैसे भी, जो आप शायद कर रहे हैं, एकल वाले (') के बजाय दोहरे उद्धरण (") का उपयोग कर रहे हैं। वे बहुत अलग व्यवहार करते हैं जब यह खोल की बात आती है कि आपने क्या टाइप किया है। दोहरे उद्धरण चिह्नों के साथ, यह चतुर चीजों को करने की कोशिश करेगा। बैकस्लैश / कुछ-वर्णों के अनुक्रम। इस असाइनमेंट के लिए, क्योंकि \ u, \ h, और \ W के बारे में कुछ खास नहीं है, वे अछूते रह गए हैं; वर्ग कोष्ठक के विभिन्न स्थानों में विशेष अर्थ हो सकते हैं, लेकिन इस मामले में नहीं; इसलिए वे भी जगह में छोड़ दिए गए हैं; लेकिन चूंकि $उनमें से कई प्रकार के अर्थ हैं, उनमें से सभी विशेष हैं, \$अनुक्रम को "डॉलर के संकेत की विशिष्टता को अनदेखा करना, और बस वहां छोड़ देना" के रूप में व्याख्या की गई है, और उस अनुक्रम को बदल दिया गया है नो-आगे-पार्स किए गए एकल डॉलर का संकेत। उस सभी का परिणाम सौंपा गया हैPS1, और जब से एक शाब्दिक डॉलर चिह्न है, और जादू \$अनुक्रम नहीं है जब शेल वास्तविक प्रॉम्प्ट का निर्माण करता है, तो आपको बस डॉलर का संकेत मिलता है, और प्रभावी-उपयोगकर्ता-निर्भर चरित्र नहीं। वास्तविक पार्सिंग थोड़ा अधिक जटिल है, लेकिन इस विशेष उदाहरण के लिए इसका सार है।

आपने जो टाइप किया है: PS1="[\u@\h \W]\$ "
शेल किसको सौंपा है: PS1 <- "[\u@\h \W]$ "
आप क्या चाहते थे: PS1 <- "[\u@\h \W]\$ "
आपको क्या टाइप करना चाहिए:PS1='[\u@\h \W]\$ '

आपको आगे क्या करना चाहिए: शेल के बारे में अधिक जानने के लिए इस ट्यूटोरियल जैसा कुछ पढ़ें ।


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

यदि आपको कभी किसी कारण से डबल-कोट्स का उपयोग करने की आवश्यकता होती है, तो PS1="...\\\$"यह सुनिश्चित करने के लिए उपयोग करें कि शाब्दिक जोड़ी बाद में व्याख्या करने के लिए शेल \$में संग्रहीत है PS1
चेपनर

0

क्या आपने रूट यूजर को स्विच किया है sudo su, suया रूट के रूप में लॉग इन करके? idयह जाँचने के लिए उपयोग करें कि कंप्यूटर किसे आपको लॉग इन के रूप में मानता है, क्योंकि यह प्रभावित कर सकता है कि आप वास्तव में किस प्रोफ़ाइल को संपादित कर रहे हैं।

Https://askubuntu.com/questions/305052/changing-behavior-of-bash-prompt-when-functioning-as-root के जवाब देखें।

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