हर बार एक नया प्रॉम्प्ट प्रदर्शित होने पर बैश प्रॉम्प्ट निष्पादित करें


11

मेरे पास bash में निम्नलिखित संकेत है जो वर्तमान git शाखा को दर्शाता है:

PS1+="$(git_prompt)" #git_prompt is a function in my .bashrc

जो काम करता है जब मैं .bashrc स्रोत करता हूं, लेकिन जब मैं शाखा नहीं बदलता हूं, तो PS1 संस्करण केवल I स्रोत .bashrc का मूल्यांकन करता है, लेकिन हर बार एक नया संकेत प्रदर्शित होने पर इसका मूल्यांकन किया जाना चाहिए। यह बाश 4.3 के साथ कैसे पूरा किया जा सकता है?

जवाबों:


14

आपकी समस्या यह है कि इसे जोड़ने से पहले$(git_prompt) कुछ निरंतर स्ट्रिंग का मूल्यांकन किया जाता है । आपको इसके बजाय कोड जोड़ना होगा:$PS1

PS1+='$(git_prompt)'

2
यह त्रुटि देता है bash: command substitution: line 1: syntax error near unexpected token ) 'bash: कमांड प्रतिस्थापन: लाइन 1:git_prompt)'
danielr1996

1
यह वास्तव में अजीब है। एक "बैकअप" ( oldPS1="$PS1") बनाएं और फिर कोशिश करें:PS1='$(git_prompt) '
हॉक लैजिंग

9

मैंने इसे तुरंत उपयोग करके इसे ठीक कर दिया

PS1="$green\u $r@ $red\h $r: $yellow\W \!$r \$(git_prompt) \n$yellow\$ $r"

इससे पहले कि मैं एक PS1 स्ट्रिंग के लिए कई तार concatenated, वहाँ समस्या लग रहा था। \आदेश के साथ बहाने से पहले लिखने के लिए चाल है $(git_prompt)

तो $(git_prompt)जब मूल्यांकन किया जाएगा .bashrcमूल्यांकन किया जाता है और

\$(git_prompt) मूल्यांकन किया जाएगा हर बार एक नया संकेत प्रदर्शित किया जाता है


5
भविष्य में इसे खोजने वाले किसी भी व्यक्ति के लिए: "स्ट्रिंग के चारों ओर संलग्न दोहरे उद्धरणों पर ध्यान दें । \$(git_prompt)उन लोगों के बिना उपयोग करना काम नहीं करता है।
dthor

1

अपने ps1 में एकल उद्धरण का प्रयास करें

PS1+='$(git_prompt)'

मैं भी अपने psOne फ़ंक्शन का सुझाव देता हूं

psOne () 
{ 
    ps1tm=${1:-01};
    ps1tc=(30 31 32 33 34 35 36 37 38);
    PS1='${debian_chroot:+($debian_chroot)}\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\]\u\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\]@\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\]\h\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\] :\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\] \w\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\] \$ '
}

यहाँ छवि विवरण दर्ज करें


यह दिलचस्प लग रहा है, क्या आप बता सकते हैं कि ps1tm क्या है?
danielr1996

@ danielr1996 यह टेक्स्ट मोड (बोल्ड अनबॉंक ब्लिंक अंडरलाइन {0..5} है, इस फ़ंक्शन में यह 01 पर सेट है यदि कोई तर्क मौजूद नहीं है
जोना

0

पागलपन देखना चाहते हैं? इस तरह से मैं अपने बैश प्रॉम्प्ट का निर्माण करता हूं:

# inspiration: http://www.stumbleupon.com/su/2LpQMi 
user_host_path="${debian_chroot:+($debian_chroot) }"'\u@\h:\w'
xterm_title='\[\e]0;'"$user_host_path"'\a\]'
[[ $TERM == xterm* || $TERM == rxvt* ]] && line1="${xterm_title}"
git_branch='$(git_current_branch " (%s)")'
line1="${line1}${user_host_path}${git_branch} "
line2='\$ '
print_time='{ printf "%*s" $(($(tput cols) - 10)) " "|sed -e "s/./˙/g" -re "s/.{6}(..)$/ bash \1/"; date "+ %T"; } >&2'
color_bold='\[\e[0;1m\]'
color_reset='\[\e[0m\]'
PROMPT_COMMAND="_rc_=\$?;${print_time};((_rc_!=0)) && PS1='${line1}\n${color_bold}[\$_rc_]${color_reset} ${line2}' || PS1='${line1}\n${line2}'"
unset user_host_path xterm_title color_bold color_reset line1 line2 print_time git_branch

मैं रंग का बड़ा प्रशंसक नहीं हूं।

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