बैश के त्वरित नियंत्रण सुविधाएँ स्थिर हैं। यदि आप अधिक नियंत्रण चाहते हैं, तो आप अपने प्रॉम्प्ट में चर शामिल कर सकते हैं; सुनिश्चित करें कि आपने promptvars
विकल्प बंद नहीं किया है ।
PS1='${PWD#"${PWD%/*/*}/"} \$ '
एकल उद्धरणों पर ध्यान दें: चर का विस्तार उस समय होना चाहिए, जब प्रॉम्प्ट प्रदर्शित किया गया हो, उस समय नहीं जब PS1
चर परिभाषित किया जाता है।
यदि आप प्रदर्शित हैं पर अधिक नियंत्रण चाहते हैं, तो आप कमांड प्रतिस्थापन का उपयोग कर सकते हैं। उदाहरण के लिए, ऊपर दिया गया स्निपेट ~
होम डायरेक्टरी के लिए संक्षिप्त नाम खो देता है ।
PS1='$(case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac; printf %s "$HPWD") \$ '
यह कोड बल्कि बोझिल है, इसलिए इसे PS1
चर में चिपकाने के बजाय , आप PROMPT_COMMAND
चर को चलाने के लिए कोड को सेट करने के लिए उपयोग कर सकते हैं HPWD
और फिर अपने प्रॉम्प्ट में इसका उपयोग कर सकते हैं।
PROMPT_COMMAND='case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac'
PS1='$HPWD \$'
चूंकि छोटा प्रॉम्प्ट केवल एक निर्देशिका परिवर्तन पर बदल गया है, आपको हर बार एक प्रॉम्प्ट प्रदर्शित होने पर इसे पुनर्गणना करने की आवश्यकता नहीं है। बैश एक हुक प्रदान नहीं करता है जो एक वर्तमान निर्देशिका परिवर्तन पर चलता है, लेकिन आप इसे ओवरराइडिंग cd
और इसके चचेरे भाई द्वारा अनुकरण कर सकते हैं ।
cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
chpwd () {
case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac
}
PS1='$HPWD \$'
ध्यान दें कि आपको इसकी आवश्यकता नहीं है, और निर्यात नहीं करना चाहिए PS1
, क्योंकि यह शेल सेटिंग है, पर्यावरण चर नहीं है। एक बैश PS1
सेटिंग अन्य गोले द्वारा समझ में नहीं आएगा।
पुनश्च यदि आप एक अच्छा इंटरैक्टिव शेल अनुभव चाहते हैं, तो zsh पर स्विच करें , जहां ये सभी (शीघ्र %
विस्तार बड़े पैमाने पर tcsh chpwd
, इत्यादि शामिल हैं ) मूल विशेषताएं हैं।
PS1='%2~ %# '
PS1='\w \$'; PROMPT_DIRTRIM=2
आपको बैश के बराबर देना चाहिए, लेकिन यह मेरे सिस्टम पर ठीक से काम नहीं करता है।