मैं इसका उपयोग करता हूं, यह कई लाइनों पर लिपटता है और लंबाई से संकेत मिलता है user@host
ताकि यह मान ले कि करंट PS1
प्रभावी रूप से ' \u@\h:\w$
' है। यह पथ को छोटा नहीं करता है, और यह वर्तमान टर्मिनल चौड़ाई के लिए अनुकूल है। यह केवल पथ को विभाजित /
करता है, इसलिए यह वास्तव में लंबी निर्देशिकाओं के साथ सुरुचिपूर्ण ढंग से व्यवहार नहीं करता है (लेकिन यह चयन / प्रतिलिपि के लिए रिक्त स्थान को संरक्षित करता है)। यह सुनिश्चित करता है कि आपके पास इनपुट के लिए हमेशा कम से कम 20 वर्ण का स्थान उपलब्ध हो।
readonly _PS1="${PS1}" 2>/dev/null
function myprompt()
{
local IFS
local nn nb pbits xpwd="" ww=60 len=0 pp='\\w\$ '
local indent uh="${LOGNAME}@${HOSTNAME//.*/}"
test -n "$COLUMNS" && let ww=$COLUMNS-20 # may be unset at startup
PS1="${_PS1}"
if [ ${#PWD} -ge $ww ]; then
printf -v indent "%${#uh}s%s" " " "> " # indent strlen(user@host)
IFS=/ pbits=( $PWD ); unset IFS
nb=${#pbits[*]}
for ((nn=1; nn<nb; nn++)) {
if [ $(( $len + 1 + ${#pbits[$nn]} )) -gt $ww ]; then
xpwd="${xpwd}/...\n${indent}..."
len=0
fi
xpwd="${xpwd}/${pbits[$nn]}"
let len=len+1+${#pbits[$nn]}
}
# add another newline+indent if the input space is too tight
if (( ( ${#uh} + len ) > ww )); then
printf -v xpwd "${xpwd}\n%${#uh}s" " "
fi
PS1="${PS1/$pp/$xpwd}$ "
fi
}
PROMPT_COMMAND=myprompt
यह जादू \w
(केवल इसके \w$
लिए मेल खाता है ) को बाहर PS1
ले जाने और इसके साथ बदलने के द्वारा काम करता है $PWD
, फिर इसे पात्रों के एक सादे स्ट्रिंग के रूप में लपेटता है। यह PS1
मूल मूल्य से हर बार पुनः प्राप्त होता है _PS1
, जो इसमें सहेजा जाता है , इसका मतलब है कि "अदृश्य" बच गए हैं, मेरी पूरी मूल शीघ्र स्ट्रिंग के लिए xterm
और बोल्ड प्रॉम्प्ट:
PS1="\[\033]0;\u@\h:\w\007\]\[$(tput bold)\]\u@\h\[$(tput sgr0)\]:\w$ "
और 80 कॉलम टर्मिनल में अंतिम परिणाम:
mr@onomatopoeia:~$ cd /usr/src/linux/tools/perf/scripts/perl/Perf-Trace-Util/lib/Perf/Trace
mr@onomatopoeia:/usr/src/linux/tools/perf/scripts/perl/Perf-Trace-Util/lib/...
> .../Perf/Trace$ _
यह bash-3.2 से काम करता है जैसा printf -v var
कि प्रयोग किया जाता है। विभिन्न जटिलताओं के कारण इसे अन्य विविधताओं के लिए कुछ समायोजन की आवश्यकता होगीPS1
।
( Xterm टाइटल बार में पथ न तो लिपटा हुआ है और न ही संक्षिप्त है, ऐसा कुछ है जो यहां दिए गए अन्य उत्तरों में से एक को उपरोक्त फ़ंक्शन में शामिल करके किया जा सकता है।)