मेरा बैश प्रॉम्प्ट अपडेट क्यों नहीं करता है?


83

मैं git में नया हूं और मैं अपने पहले से मौजूद प्रॉम्प्ट में वर्तमान git शाखा को जोड़ने की कोशिश कर रहा हूं, जिसे निम्नानुसार परिभाषित किया गया है:

RESET="\[\017\]"
NORMAL="\[\033[0m\]"
RED="\[\033[31;1m\]"
YELLOW="\[\033[33;1m\]"
WHITE="\[\033[37;1m\]"
SMILEY="${WHITE}:)${NORMAL}"
FROWNY="${RED}:(${NORMAL}"
SELECT="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"

export PS1="${RESET}${YELLOW}\u@\h${NORMAL} \`${SELECT}\` ${YELLOW}\w $(__git_ps1) >${NORMAL} "

मैंने इसे आज़माया (अपनी .bashrcफ़ाइल को फिर से सोर्स करके ) और यह काम करने लगा, लेकिन फिर मैं दूसरी शाखा में चला गया और यह अपडेट नहीं हुआ। मैं कैसे सुनिश्चित कर सकता हूं कि $(__git_ps1)कैश नहीं है?


14
मुझे लगता है कि अंतिम कमांड में विफल होने के आधार पर :)और :(आपके संकेत में मुझे प्यार है :)
मार्क लॉन्गेयर

@ मर्क लोंगेयर: मैंने इसे यहां पाया: serverfault.com/questions/4889/… BTW, आपने अपना समाधान क्यों निकाला , यह भी काम करता है!
greg0ire

यह अन्य दो की तुलना में बाद में मिनट था, और @ geekosaur के वैसे भी कम साफ है
मार्क लॉन्गेयर

1
इस सटीक प्रश्न को पूछने के लिए बहुत बहुत धन्यवाद (और, ज़ाहिर है, उसके जवाब के लिए geekosaur को)! मैं HOURS के बारे में जानने की कोशिश कर रहा हूं कि मेरा प्रॉम्प्ट केवल अपनी git स्टेटस लाइन को अपडेट क्यों कर रहा है जब मैंने अपनी .bashrc फ़ाइल को सॉर्ट किया था।
coredumperror

जवाबों:


132

आपको बैकस्लैश की आवश्यकता है $ताकि यह तुरंत विस्तारित न हो। (की तुलना करें `...`, जो लिखने का एक अलग तरीका है $(...)।)

export PS1="${RESET}${YELLOW}\u@\h${NORMAL} \`${SELECT}\` ${YELLOW}\w \$(__git_ps1) >${NORMAL} "

मैं एकल उद्धरण का उपयोग करने के बारे में @MikeSep के साथ सहमत हूं, लेकिन यह वास्तव में रंगों को जाने देने के लिए थोड़ा अधिक इष्टतम है और इस तरह तुरंत प्रतिस्थापित किया जा सकता है। जरूरी नहीं, बस कुछ बेहतर हो। जैसा कि कहा गया है, यह है समझने के लिए अगर आप एकल उद्धरण का उपयोग हो रहा है आसान।


2
इसके अलावा, यदि आप कभी भी टर्मिनल प्रोग्राम के अलावा अन्य चीजों में सीधे काम करते हैं (Emacs / Vim कमांड बफ़र्स screen, आदि), तो आप tputहार्ड-कोडेड कलर एस्केप के बजाय उपयोग में देखना चाहते हैं ।
geekosaur

1
इस मामले में रंग चरों को प्रतिस्थापित किया जाना आवश्यक है, मुझे लगता है - कम से कम, मुझे @ माइकसैप के सुझाव के साथ भागने के कोड मिलते हैं, जबकि आपका एक ठीक काम करता है। (+1)
मार्क लॉन्गेयर

@ मर्क: यह दिलचस्प है; ${SELECT}एक यह दर्शाता है कि पुनरावर्ती मूल्यांकन किया जा रहा है। शायद यह केवल आदेशों के लिए है? मैं आमतौर पर पीएस 1 फ़ंक्शन का उपयोग करता हूं, क्योंकि यह पता लगाना आसान है कि क्या चल रहा है।
गीकॉर्पोस

साभार @geekosaur
स्मोफ

3
यार, तुम एक जीवन रक्षक हो। हालांकि मेरा एक सवाल है: मेरे पास एक MBP और एक iMac है। समान .bash_profile, बैश का एक ही संस्करण (होमब्रे के माध्यम से स्थापित)। MBP पर अगर मैं \ N को सामने नहीं जोड़ता $(__git_ps1), तो इसका मूल्यांकन नहीं किया जाएगा। अगर मैं iMac पर एक ही काम करता हूं, तो इसका मूल्यांकन बिना \ _ के भी हो जाता है। किसी भी विचार यह कैसे हो सकता है?
मोली

24

आपकी PS1स्ट्रिंग का मूल्यांकन होने से पहले संभवतः उसका मूल्यांकन किया जा रहा है, लेकिन आप वास्तव में चाहते हैं कि __git_ps1कमांड हर बार आपको कमांड प्रॉम्प्ट चलाने के लिए चलाए। मैं आपकी export PS1='${RESET}...'पंक्ति के लिए दोहरे उद्धरण चिह्नों के बजाय एकल उद्धरणों का उपयोग करने की सलाह दूंगा ।


काम कर सकते हैं, लेकिन मुझे सभी सिस्टम को सिंगल कोट्स में परिवर्तित करने में समस्या आ रही है, इसलिए मैं आपको geekosaur के समाधान का उपयोग करूंगा। लेकिन तुम मेरा उत्थान भी प्राप्त करो।
greg0ire

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