पीएस 1 सेटअप को बैश करें


9

मैं निम्नानुसार PS1 को कॉन्फ़िगर करने का प्रयास कर रहा हूं।

ग्रीन = "\ [\ ई [32; 1 मी \]"
लाल = "\ ई [0; 31 एम"
बैंगनी = "\ ई [0; 35 minute"
STARTCOLOR = "\ [\ ई [40m \]"
ENDCOLOR = "\ [\ ई [0m \]"
निर्यात PS1 = "$ STARTCOLOR $ Green \ u @ $ बैंगनी \ h $ Red \ w $ हरा> $ ENOLOLOR"

और मेरे कुछ सवाल हैं।

  • "[\ E [32; 1m]" और \ e [32; 1m "के बीच क्या अंतर है? क्या वे समान हैं?
  • 'निर्यात PS1' कमांड को चलाने के बाद, यह अच्छी तरह से काम करता है, लेकिन जब मैं लगभग 20 वर्णों को इनपुट देता हूं, तो वर्ण मेरे द्वारा संलग्न किए जाते हैं। इसमें गलत क्या है?
  • STARTCOLOR (\ e [40m) / ENDCOLOR (\ e [0m) का क्या अर्थ है?

http://a.imageshack.us/img8/606/resultqm.jpg

जोड़ा

कुछ परीक्षणों के बाद, मुझे निम्नलिखित परिवर्तन मिला जिससे समस्या हल हो सकती है। यही है, "\ e" प्रारूप को "\ [\ e" प्रारूप द्वारा प्रतिस्थापित किया जाना चाहिए।

लाल = "\\ e [1; 31 मीटर" - काम नहीं कर रहा है
लाल = "\ _ \ _ [1; 31 मीटर \" "- काम कर रहा है

जवाबों:


12

मेरे पास शीघ्रता से सेट करने के लिए एक सहायक कार्य है, और क्योंकि मैं भागने के कोड संदर्भों की तलाश में अधिक समय नहीं बिताना चाहता, मैंने इसमें सभी पाठ रंग मूल्यों को कोडित किया है।

function set_prompt ( )
{
    # Prompt setup
    # ##################

    # Black            \e[0;30m
    # Blue             \e[0;34m
    # Green            \e[0;32m
    # Cyan             \e[0;36m
    # Red              \e[0;31m
    # Purple           \e[0;35m
    # Brown            \e[0;33m
    # Gray             \e[0;37m
    # Dark Gray        \e[1;30m
    # Light Blue       \e[1;34m
    # Light Green      \e[1;32m
    # Light Cyan       \e[1;36m
    # Light Red        \e[1;31m
    # Light Purple     \e[1;35m
    # Yellow           \e[1;33m
    # White            \e[1;37m

    local COLOR_DEFAULT='\[\e[0m\]'
    local COLOR_BLACK='\[\e[0;30m\]'
    local COLOR_BLUE='\[\e[0;34m\]'
    local COLOR_GREEN='\[\e[0;32m\]'
    local COLOR_CYAN='\[\e[0;36m\]'
    local COLOR_RED='\[\e[0;31m\]'
    local COLOR_PURPLE='\[\e[0;35m\]'
    local COLOR_BROWN='\[\e[0;33m\]'
    local COLOR_GRAY='\[\e[0;37m\]'
    local COLOR_DARK_GRAY='\[\e[1;30m\]'
    local COLOR_L_BLUE='\[\e[1;34m\]'
    local COLOR_L_GREEN='\[\e[1;32m\]'
    local COLOR_L_CYAN='\[\e[1;36m\]'
    local COLOR_L_RED='\[\e[1;31m\]'
    local COLOR_L_PURPLE='\[\e[1;35m\]'
    local COLOR_YELLOW='\[\e[1;33m\]'
    local COLOR_WHITE='\[\e[1;37m\]'

    local PS1_SET_TITLE='\[\e]0;\w\a\]'

    local PS1_SET_TIME="${COLOR_DEFAULT}\t"
    local PS1_SET_RET_CODE="${COLOR_L_RED}(\$?)"
    local PS1_SET_USER="${COLOR_L_GREEN}\u@\h"
    local PS1_SET_PWD="${COLOR_YELLOW}\w"

    local PS1_LN_1="${PS1_SET_TITLE}\n"
    local PS1_LN_2="${PS1_SET_TIME} ${PS1_SET_RET_CODE} "
    local PS1_LN_2="${PS1_LN_2}${PS1_SET_USER} ${PS1_SET_PWD} ${COLOR_DEFAULT}\n"

    echo "${PS1_LN_1}${PS1_LN_2}"
}

आप तब कर सकते हैं:

PS1=$( set_prompt )

# Use '#' for root shell
export PS1=${PS1}'$ '

unset -f set_prompt

यहाँ लिंक है जो VT100 टर्मिनल कोड बताते हैं: http://www.termsys.demon.co.uk/vtansi.htm

\[- गैर-मुद्रण वर्णों का अनुक्रम शुरू करें - गैर-मुद्रण वर्णों का
\]अंत क्रम

  • "[\ E [32; 1m]" और \ e [32; 1m "के बीच क्या अंतर है? क्या वे समान हैं?

यही नहीं, और यह होना चाहिए \[\e[32;1m\]'. Without[] `यह सांत्वना में अनुक्रम मुद्रित करने की कोशिश करेंगे।

  • STARTCOLOR (\ e [40m) / ENDCOLOR (\ e [0m) का क्या अर्थ है?

STARTCOLOR, का अर्थ है पृष्ठभूमि को काला करना, ENDCOLOR का अर्थ है सभी पाठ विशेषताओं को रीसेट करना, जिसका अर्थ है 'मुझे डिफ़ॉल्ट कंसोल रंग दें'


+1 बहुत अच्छा !!! बुरा मत मानना ​​मैं इसे अपने bashrc :)
Eldelshell

@Ubersoldat। हर्गिज नहीं।
अलेक्जेंडर पोगरेबनेक

1
\$रूट और नॉन-रूट इंडिकेशन के बीच स्वचालित रूप से स्विच करने के लिए उपयोग करें ।
अगली सूचना तक रोक दिया गया।

9

बैश मैनुअल से:

\[    गैर-मुद्रण वर्णों का एक क्रम शुरू करें, जिसका उपयोग टर्मिनल नियंत्रण अनुक्रम को तुरंत करने के लिए किया जा सकता है
\]    गैर-मुद्रण वर्णों का एक क्रम

\[और \]टर्मिनल को पारित नहीं किया जाता है। वे मारपीट को बताते हैं कि उनके बीच के चरित्र मुद्रित नहीं होने जा रहे हैं। उनके बिना, बैश को पता नहीं चल सकता था कि भागने के चरित्र (ई, जी [32;1m) के बाद अनुक्रम स्क्रीन पर कोई स्थान नहीं लेता है, जो बताता है कि जब आपने उन्हें छोड़ा था तो प्रांप्ट की लंबाई की सही गणना क्यों नहीं की।

ध्यान दें कि आप अपने प्रश्न में बहुत सुसंगत नहीं हैं (या शायद यह मार्कडाउन की गलती है); आपको एक शाब्दिक बैकस्लैश-ब्रैकेट अनुक्रम की आवश्यकता है $PS1, न कि केवल एक ब्रैकेट (जिसे शाब्दिक रूप से प्रदर्शित किया जाएगा)।

\eटर्मिनल इम्यूलेटर द्वारा शुरू किए गए एस्केप सीक्वेंस की व्याख्या की जाती है। उन्हें Xterm कंट्रोल सीक्वेंस (ctlseqs) डॉक्यूमेंट (अन्य टर्मिनल एमुलेटर ज्यादातर संगत होते हैं ) में प्रलेखित किया जाता है। उदाहरण के लिए, \e[32;1mबोल्ड और ग्रीन अग्रभूमि पर स्विच; \e[40mपृष्ठभूमि का रंग काला करने के लिए स्विच करता है; \e[0mडिफ़ॉल्ट विशेषताओं को पुनर्स्थापित करता है।


3

अधिकांश आधुनिक टर्मिनल एमुलेटर डिस्प्ले के विभिन्न पहलुओं को नियंत्रित करने के लिए एएनएसआई एस्केप कोड का उपयोग करने में सक्षम हैं।

अधिकांश ANSI कोड 2-वर्ण कोड ESC- से शुरू होते हैं [जो कि एस्केप स्क्वायर (ASCII दशमलव 27) है, जिसके बाद ओपन स्क्वायर ब्रैकेट कैरेक्टर होता है। इस अनुक्रम को CSI या नियंत्रण अनुक्रम पहल के रूप में भी जाना जाता है।

क्योंकि भागने का चरित्र वह नहीं है जिसे आप सीधे टाइप कर सकते हैं (Esc कुंजी में अन्य, अक्सर अनुप्रयोग विशिष्ट, उपयोग करता है) इसे संदर्भित करने के लिए '\ e' का उपयोग करता है।

पाठ रंग बदलने से ANSI सेट ग्राफिक्स मोड कमांड का उपयोग होता है:

\e[<value>m

<value>अर्ध-कॉलनों ( ;) द्वारा अलग किए गए मानों की सूची कहां हो सकती है । आम तौर पर सिर्फ एक मूल्य का उपयोग किया जाता है, हालांकि बोल्ड विशेषता रंग विशेषताओं के साथ संयोजन में उपयोगी है।

अलेक्जेंडर पोगरेबनीक के उत्तर में सूचीबद्ध मूल्यों को देखते हुए, अर्ध-बृहदान्त्र से पहले 0 या 1 बोल्ड है या नहीं:

\e[1m  # bold
\e[5m  # blink
\e[0m  # all attributes off

यहाँ कोड की एक उपयोगी सूची है http://ascii-table.com/ansi-escape-fterences.php

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