मुझे यहां मिली जानकारी के आधार पर मैं रंग के लिए समर्थन सहित दाईं या बाईं ओर चर लंबाई सामग्री को समायोजित करते हुए दाएं संरेखित करने के लिए एक सरल समाधान खोजने में सक्षम था। आपकी सुविधा के लिए यहां जोड़ा गया ...
रंगों पर ध्यान दें:\033
विकल्पों के पक्ष में भागने का उपयोग करना , बिना \[\]
समूहों के, सबसे अधिक संगत और अनुशंसित है।
ट्रिक पहले दाहिने हाथ की ओर लिखने की है, फिर \r
लाइन की शुरुआत में लौटने के लिए गाड़ी वापसी ( ) का उपयोग करें और बाएं हाथ की सामग्री को उस के शीर्ष पर लिखना जारी रखें, निम्नानुसार:
prompt() {
PS1=$(printf "%*s\r%s\n\$ " "$(tput cols)" 'right' 'left')
}
PROMPT_COMMAND=prompt
मैं tput cols
टर्मिनल / कंसोल की चौड़ाई को पुनः प्राप्त करने के लिए मैक ओएस एक्स पर उपयोग कर रहा हूं terminfo
क्योंकि मेरी $COLUMNS
var पॉपुलेटेड नहीं है, env
लेकिन आप बदले में बदली जा सकने वाली " *
" वैल्यू इन %*s
, " ${COLUMNS}
" या आपके द्वारा पसंद किए जाने वाले किसी अन्य मूल्य को स्थानापन्न कर सकते हैं।
अगला उदाहरण $RANDOM
विभिन्न लंबाई सामग्री उत्पन्न करने के लिए उपयोग करता है जिसमें रंग शामिल हैं और दिखाता है कि आप पुन: प्रयोज्य कार्यों के कार्यान्वयन के लिए कार्यों को कैसे निकाल सकते हैं।
function prompt_right() {
echo -e "\033[0;36m$(echo ${RANDOM})\033[0m"
}
function prompt_left() {
echo -e "\033[0;35m${RANDOM}\033[0m"
}
function prompt() {
compensate=11
PS1=$(printf "%*s\r%s\n\$ " "$(($(tput cols)+${compensate}))" "$(prompt_right)" "$(prompt_left)")
}
PROMPT_COMMAND=prompt
चूँकि printf
स्ट्रिंग की लंबाई वर्णों की # होती है, इसलिए हमें रंगों को रेंडर करने के लिए आवश्यक वर्णों की मात्रा की भरपाई करने की आवश्यकता होती है, आपको यह पता चलेगा कि बिना क्षतिपूर्ति किए ANSI वर्णों के बिना स्क्रीन के अंत में हमेशा कमी रहेगी। रंग के लिए आवश्यक वर्ण स्थिर रहते हैं और आप पाएंगे कि प्रिंटफ लंबाई में बदलाव को भी ध्यान में रखता है, जैसे कि $RANDOM
उदाहरण के लिए '।
इस विशेष पार्टी शीघ्र भागने दृश्यों के मामले में (यानी। नहीं है \u
, \w
, \h
, \t
) हालांकि, इसलिए उन्हें ही 2 की लंबाई रिकॉर्ड करेगा क्योंकि पार्टी केवल उन्हें, जब संकेत दिखाई देने पर अनुवाद करेगा printf के बाद स्ट्रिंग प्रदान की गई है। यह बाएं हाथ की तरफ को प्रभावित नहीं करता है लेकिन दाएं से बचने के लिए सबसे अच्छा है।
कोई महत्व का है, तो द्वारा निर्मित सामग्री को हालांकि लगातार लंबाई पर बना रहेगा। समय \t
विकल्प की तरह जो हमेशा 24 समय के लिए वर्णों (8) की समान राशि प्रदान करेगा। हमें इन मामलों में मुद्रित किए गए 8 वर्णों के लिए गिने गए 2 वर्णों के बीच अंतर के लिए आवश्यक मुआवजे में केवल कारक की आवश्यकता है।
ध्यान रखें कि आपको \\\
कुछ भागने के क्रम को तीन गुना करने की आवश्यकता हो सकती है जो अन्यथा स्ट्रिंग के लिए अर्थ रखती है। निम्नलिखित उदाहरण के साथ वर्तमान कार्य निर्देशिका से बच निकलने \w
का कोई अर्थ नहीं है, इसलिए यह अपेक्षा के अनुरूप काम करता है, लेकिन समय \t
, जिसका अर्थ एक टैब वर्ण है, पहले ट्रिपल से बचने के बिना अपेक्षा के अनुरूप काम नहीं करता है।
function prompt_right() {
echo -e "\033[0;36m\\\t\033[0m"
}
function prompt_left() {
echo -e "\033[0;35m\w\033[0m"
}
function prompt() {
compensate=5
PS1=$(printf "%*s\r%s\n\$ " "$(($(tput cols)+${compensate}))" "$(prompt_right)" "$(prompt_left)")
}
PROMPT_COMMAND=prompt
एन ज्वॉय!