PROMPT_COMMAND में साधारण बैश स्टेटमेंट हो सकते हैं जबकि PS1 वैरिएबल में वैरिएम के लिए 'वर्ण' जैसे विशेष वर्ण भी हो सकते हैं।
उदाहरण के लिए यहाँ मेरा bash प्रॉम्प्ट है जो PROMPT_COMMAND और PS1 दोनों का उपयोग करता है। PROMPT_COMMAND में बैश कोड यह बताता है कि आप किस git ब्रांच में हो सकते हैं और यह दिखाते हैं कि प्रॉम्प्ट पर, अंतिम रन प्रक्रिया की बाहर निकलने की स्थिति, होस्टनाम और pwd के बेसनेम। चर आरईटी अंतिम निष्पादित कार्यक्रम के रिटर्न मूल्य को संग्रहीत करता है। यह देखने के लिए सुविधाजनक है कि क्या टर्मिनल में मेरे द्वारा चलाए गए अंतिम प्रोग्राम की त्रुटि और त्रुटि कोड था। संपूर्ण PROMPT_COMMAND अभिव्यक्ति के आसपास के बाहरी भाग पर ध्यान दें। इसमें PS1 शामिल है ताकि PROMPT_COMMAND चर का मूल्यांकन होने पर हर बार इस चर का पुनर्मूल्यांकन किया जाए।
PROMPT_COMMAND='RET=$?;\
BRANCH="";\
ERRMSG="";\
if [[ $RET != 0 ]]; then\
ERRMSG=" $RET";\
fi;\
if git branch &>/dev/null; then\
BRANCH=$(git branch 2>/dev/null | grep \* | cut -d " " -f 2);\
fi;
PS1="$GREEN\u@\h $BLUE\W $CYAN$BRANCH$RED$ERRMSG \$ $LIGHT_GRAY";'
उदाहरण आउटपुट गैर-गिट निर्देशिका में इस तरह दिखता है:
sashan@dhcp-au-122 Documents $ false
sashan@dhcp-au-122 Documents 1 $
और एक गिट निर्देशिका में आप शाखा का नाम देखते हैं:
sashan@dhcp-au-122 rework mybranch $
अपडेट करें
टिप्पणियों और बॉब के उत्तर को पढ़ने के बाद मुझे लगता है कि इसे लिखना, जैसा कि वह बताता है कि बेहतर है। यह जितना मैंने मूल रूप से ऊपर लिखा था, उससे कहीं अधिक कायम रखने योग्य है, जहां PS1 चर PROMPT_COMMAND के अंदर सेट किया गया है, जो कि खुद एक सुपर कॉम्प्लेक्स स्ट्रिंग है जिसका मूल्यांकन बैश द्वारा रनटाइम पर किया जाता है। यह काम करता है, लेकिन यह होने की तुलना में अधिक जटिल है। निष्पक्ष होने के लिए मैंने लिखा कि PROMPT_COMMAND ने लगभग 10 साल पहले अपने लिए काम किया था और इसने काम नहीं किया और इसके बारे में बहुत ज्यादा नहीं सोचा।
उन लोगों के लिए जो मेरी बातों में संशोधन कर चुके हैं, मैंने मूल रूप से PROMPT_COMMAND के लिए कोड अलग फाइल में डाल दिया है (जैसा बॉब ने वर्णित किया है) और फिर उस स्ट्रिंग को प्रतिध्वनित करें जिसे मैं PS1 करने का इरादा रखता हूं:
GREEN="\[\033[0;32m\]"
CYAN="\[\033[0;36m\]"
RED="\[\033[0;31m\]"
PURPLE="\[\033[0;35m\]"
BROWN="\[\033[0;33m\]"
LIGHT_GRAY="\[\033[0;37m\]"
LIGHT_BLUE="\[\033[1;34m\]"
LIGHT_GREEN="\[\033[1;32m\]"
LIGHT_CYAN="\[\033[1;36m\]"
LIGHT_RED="\[\033[1;31m\]"
LIGHT_PURPLE="\[\033[1;35m\]"
YELLOW="\[\033[1;33m\]"
WHITE="\[\033[1;37m\]"
RESTORE="\[\033[0m\]" #0m restores to the terminal's default colour
if [ -z $SCHROOT_CHROOT_NAME ]; then
SCHROOT_CHROOT_NAME=" "
fi
BRANCH=""
ERRMSG=""
RET=$1
if [[ $RET != 0 ]]; then
ERRMSG=" $RET"
fi
if which git &>/dev/null; then
BRANCH=$(git branch 2>/dev/null | grep \* | cut -d " " -f 2)
else
BRANCH="(git not installed)"
fi
echo "${GREEN}\u@\h${SCHROOT_CHROOT_NAME}${BLUE}\w \
${CYAN}${BRANCH}${RED}${ERRMSG} \$ $RESTORE"
और मेरे .bashrc में
function prompt_command {
RET=$?
export PS1=$(~/.bash_prompt_command $RET)
}
PROMPT_DIRTRIM=3
export PROMPT_COMMAND=prompt_command
if git branch &>/dev/null ; then\
:। यह stdout और stderr दोनों को / dev / null में रीडायरेक्ट करता है। tldp.org/LDP/abs/html/io-redirection.html