मैं बैश प्रॉम्प्ट में निरपेक्ष पथ कैसे प्रदर्शित कर सकता हूं?


50

मेरा वर्तमान में मेरा बैश PS1कुछ इस तरह है:

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\w\n\$ "

मैं इसे रिश्तेदार के बजाय पूर्ण पथ कैसे दिखा सकता हूं (उदाहरण के /home/dave/dirबजाय ~/dir)?


1
/home/dave/dirऔर ~/dirदोनों पूर्ण पथ हैं, दूसरा आपके होम डायरेक्टरी के लिए एक संक्षिप्त नाम का उपयोग करता है। एक रिश्तेदार पथ एक ऐसा मार्ग है जो रूट ( ) पर शुरू करने के बजाय आपकी वर्तमान निर्देशिका (जैसे ) के सापेक्ष है । ../dir/
डग हैरिस

3
पीएस रंग का अच्छा उपयोग पिछली कमांड की निकास स्थिति को इंगित करने के लिए। संभवत: रंग का पहला प्रयोग जो मुझे पसंद आया है।
डग हैरिस

@ डॉग हैरिस: सुधार के लिए धन्यवाद। मुझे यह रंग बहुत पसंद है। याद नहीं कि मैंने इसे पहली बार कहाँ देखा था (शायद कुछ पिछले एसयू पोस्ट में?)
डेविड बी

\u@\H[\w]:~\$बनाता हैuser@host[~/path]:~$
JREAM

जवाबों:


49

बस के \wसाथ बदलें \$PWD:

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\$PWD\n\$ "

वैसे भी अगर आपको थोड़ा टिप लगता है, तो मैं कुछ लिखूंगा:

PS1='\[`[ $? = 0 ] && X=2 || X=1; tput setaf $X`\]\h\[`tput sgr0`\]:$PWD\n\$ '

4
मैंने यह भी सोचा था, लेकिन $PWDअसाइनमेंट के समय मूल्यांकन किया जाता है PS1, प्रत्येक कॉल पर नहीं। हालांकि , यदि आप डॉलर के चिह्न से बचते हैं, तो यह काम करेगा - \$PWD। इसके साथ, डॉलर का चिन्ह असाइनमेंट के समय एक डॉलर का चिन्ह होता है और चर का मूल्यांकन प्रत्येक संकेत पर होता है। आप को +1।
डग हैरिस

ठीक है, उस \ _ को याद किया, अगर संभव हो तो मैं आमतौर पर सिंगल कोट्स के साथ काम करता हूं। धन्यवाद।
cYrus

+1 धन्यवाद! क्या आप कृपया अपनी सुंदर बैश लाइन ('टिप' वन) में जादू की व्याख्या कर सकते हैं?
डेविड बी

ज़रूर। मैंने सीधे नियंत्रण वर्ण लिखने के बजाय पठनीयता और पोर्टेबिलिटी (?) के लिए रंग बदलने के लिए tput (अधिक जानकारी के लिए आदमी tput देखें) का उपयोग किया। इसके अलावा मैंने सिंगल कोट्स का उपयोग करके डबल कोट्स और बैक स्लैश को हटा दिया। अंत में एक चर का उपयोग करके मैंने कुछ अतिरेक से बचा लिया।
17


0

bash के ps1 में; -W रिश्तेदार होना चाहिए, और -W निरपेक्ष, तो ऊपर में आप पहले से ही पूर्ण होना चाहिए!

http://wiki.archlinux.org/index.php/Color_Bash_Prompt


3
मुझे लगता है कि आप पूर्ण के साथ भ्रमित कर रहे हैं | Wकेवल वर्तमान निर्देशिका नाम wदिखाता है, पूर्ण पथ दिखाता है, लेकिन फिर भी सापेक्ष पथ का उपयोग करता है।
डेविड बी

url में शब्दावली थी, मेरी नहीं :)
Sirex

0

हम्म ~ / dir एक पूर्ण मार्ग है लेकिन "शॉर्टकट" का उपयोग करते हुए। उदाहरण के लिए, यदि आप cd /usr/localअपना संकेत देते हैं, तो संभवतः / usr / स्थानीय का पूर्ण पथ प्रदर्शित करेगा। तो वैसे भी, आप पहले से ही एक पूर्ण पथ :-)

लेकिन शायद आपका सही सवाल यह है कि बिना किसी शॉर्टकट के पूरा रास्ता कैसे दिखाया जाए ~?

हालाँकि, मुझे उस एक के लिए एक जवाब नहीं पता है और आदमी को देखकर, ऐसा लगता है कि एक (कम से कम प्रलेखित) है।


0

pwdउपयोग करने के बजाय चलाएं \W

सरल संस्करण:

export PS1="\`pwd\` $ "

अपने कोड में इसका उपयोग करना:

export PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\`pwd\`\n\$ "

1
मामूली बिंदु: Google की बैश शैली गाइड के अनुसार, बैकटिक्स के लिए $ (pwd) को प्राथमिकता दें क्योंकि नेस्टिंग और $ () नहीं होने पर बैकटिक्स को भागने की आवश्यकता होती है।
फन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.