कोर्नशेल में रंगीन संकेत


11

इस StackOverflow पोस्ट के अनुसार , यह संभव है कि KornShell में रंगीन संकेत हो। मुझे यह पता नहीं चल पाया है कि यह कैसे करना है। मैं रंग का उपयोग करने में सक्षम हूं:

echo -e "\033[34mLinux\033[00m"

एक ब्लू "लिनक्स" आउटपुट देता है, जैसा कि करता है:

printf "\033[34mLinux\033[00m"

हालाँकि, जब मैं भागने के कोड को अपने PS1प्रॉम्प्ट चर में शामिल करता हूं , तो वे बच नहीं रहे हैं। रंगीन संकेत पाने के लिए मुझे क्या करने की आवश्यकता है? Eyecandy के लिए कुछ चूसने वाला होने के अलावा, मुझे लगता है कि एक रंगीन संकेत उपयोगी है जब नेत्रहीन पार्सिंग आउटपुट।

जवाबों:


10

बस एक शाब्दिक Esc चरित्र, के साथ प्रवेश किया का उपयोग Ctrl- v, Esc(के रूप में प्रदर्शित किया जाएगा ^[: स्क्रीन पर)

PS1="^[[34mLinux^[[00m"

या echoआपके द्वारा पता किए गए कमांड के आउटपुट का उपयोग करें :

PS1="$(echo -e "\033[35mLinux\033[00m")"

यह कई बार ऐसा होता है कि मुझे एहसास होता है कि मैं अभी तक एक कमांडलाइन नोब हूं। मैं आमतौर पर अपने दोस्तों की तुलना में बहुत अच्छा महसूस करता हूं। :) पहले संस्करण ने अच्छी तरह से काम किया; क्या साफ सुथरी चाल है! मुझे दूसरे संस्करण के साथ सफलता नहीं मिली। +1
काजकर

5

आपको PS1चर में शाब्दिक पलायन चरित्र डालने की जरूरत है । Ksh88 और क्लोन जैसे pdksh और mksh (पुराने संस्करण) में printअंतर्निहित अक्षरों के अलावा नियंत्रण वर्णों के लिए कोई शाब्दिक वाक्यविन्यास नहीं है। Mksh \eभागने के लिए समझता है, लेकिन pdksh को ऑक्टल कोड की आवश्यकता होती है \033

PS1=$(print '\033[34mLinux\033[00m')

ATT ksh93 बैकलैश-एस्कैप्ड शाब्दिक सिंटैक्स का परिचय देता है $'…'(R39b के बाद से mksh में भी उपलब्ध है)। आप इन शाब्दिकों में नियंत्रण वर्ण रखने के लिए बैकस्लैश एस्केप का उपयोग कर सकते हैं।

PS1=$'\e[34mLinux\e[00m'

2
वास्तव में, mkshयह भी समर्थन करता है $'…'- माना जाता है क्योंकि डेव कॉर्न (कॉर्न शेल में कोर्न) ने जोर देकर कहा कि मैं इसे जोड़ता हूं।
mirabilos

@mirabilos आह, धन्यवाद। मैंने शायद mksh R39 के साथ एक मशीन पर उस उत्तर को टाइप किया और नए संस्करणों की जांच नहीं की।
गिल्स एसओ- बुराई को रोकना '

2

मैं mkshएक उपयोगकर्ता के लिए इनका उपयोग करता हूं shell:

# custom prompt see http://comments.gmane.org/gmane.os.miros.mksh/126
PS1=$'\a\r\a\e[1;34m\a ^ ^  ^ ^ | \a\e[36m\a${USER:=$(ulimit -c 0; id -un 2>/dev/null || echo
\?)}@${HOSTNAME%%.*}\a\e[34m\a | ^ ^  ^ ^ | \a\e[0;33m\a$(local d=${PWD:-?} p=~; [[ $p = ?(*/) ]] || d=${d/#$p/~};
print -nr -- "$d")\a\e[1;34m\a |\n ^ ^  ^ ^ | \a\e[32m\a$(date +%H:%M)\a\e[34m\a | ^ ^ >>\a\e[0m\a '

और एक अलग shellके लिए root:

PS1=$'\a\r\a\e[1;34m\a ^ ^  ^ ^  ^   \a\e[31m\a${USER:=$(ulimit -c 0; \
    id -un 2>/dev/null || echo \?)}@${HOSTNAME%%.*}\a\e[34m\a  ^ ^  ^ ^  ^ ^  ^   \a\e[0;33m\a$(
        local d=${PWD:-?} p=~
        [[ $p = ?(*/) ]] || d=${d/#$p/~}
        print -nr -- "$d"
)\a\e[1;34m\a  ^ ^ \n ^ ^  ^ ^  ^   \a\e[32m\a$(date +%H:%M)\a\e[34m\a  ^ ^  ^ ^   \a\e[0m\a '

यहाँ छवि विवरण दर्ज करें

जैसा कि विशेष वर्णों की प्रतिलिपि नहीं हुई, यहां सामान्य उपयोगकर्ता और रूट दोनों के लिए पेस्टबिन पेस्ट है


1

लोगों के जवाब में कई चीजें चल रही हैं, जिनमें से प्रत्येक में एक अलग वाक्यविन्यास शामिल है।

  1. दस्तावेज़ में दिए गए आपके टर्मिनल प्रोग्राम के लिए एस्केप सीक्वेंस।

  2. PS1 चर में टर्मिनल एस्केप अनुक्रम को कैसे एनकोड करें, उदाहरण के लिए \ e या शाब्दिक एस्केप। यह शेल पर निर्भर करता है।

  3. प्रॉम्प्ट में बदलती जानकारी कैसे जोड़ें, उदाहरण के लिए hostname, current directory इत्यादि। यह शेल पर भी निर्भर करता है। आप वर्किंग डायरेक्टरी के लिए विशेष बैकस्लैश अनुक्रमों का उपयोग करने में सक्षम हो सकते हैं, या आपको पर्यावरण चर का नाम देना होगा या कमांड लाइनों को स्ट्रिंग में एम्बेड करना होगा।

  4. कैसे बताया जाए कि कौन से अक्षर प्रिंट करते हैं और कौन से अक्षर नहीं। शेल को यह पता नहीं होता है कि आपके टर्मिनल एस्केप सीक्वेंस कहां से शुरू और खत्म होते हैं। यदि शेल में कमांड-लाइन संपादक या कुछ समान है, तो यह जानना आवश्यक है कि कौन से वर्ण प्रिंट करते हैं इसलिए यह जानता है कि कर्सर कहाँ है। इस विवरण के बिना, आपका संकेत सही लग सकता है, लेकिन संपादन अजीब व्यवहार कर सकता है।

    • कोलाहल में, आप प्रत्येक भागने के अनुक्रम से पहले और बाद में \ [डालते हैं।

    • Ksh में, आप एकल nonprinting ASCII वर्ण चुनते हैं जो स्ट्रिंग में कहीं और नहीं हो सकता है। स्ट्रिंग की शुरुआत में, आप उस चरित्र को लिखते हैं जिसके बाद ASCII की गाड़ी वापस आती है। फिर आप प्रत्येक भागने के क्रम से पहले और बाद में एक ही चरित्र लिखते हैं। z3ntu ने मार्कर वर्ण के रूप में चुना।


0

पिछले उत्तरों और अन्य स्रोतों के लिए धन्यवाद, मैं इन के साथ आने में सक्षम था:

Korn खोल शीघ्र:

PS1="$(echo "\033[32m`logname`\033[35m@\033[32m`hostname` \033[33m`pwd`\033[36m\n\$\033[0m")"

बैश प्रॉम्प्ट:

PS1="\[\e[32m\]\u\[\e[35m\]@\[\e[32m\]\h \[\e[33m\]\w\[\e[36m\]\n\$\[\e[0m\]"

ये एक ही रंग का संकेत देते हैं (हां, मैं क्वीन की अंग्रेजी बोलता हूं;)) प्रारूप में:

username@computername /current/working/directory
$

DOS समतुल्य (हालाँकि रंग विकल्प नहीं हैं):

prompt %username%@%computername% $P$_$G

जो देता है:

username@computername /current/working/directory
>

">" इसे "$" के साथ 'nixy' के बजाय 'DOSsy' रख रहा है, लेकिन यदि आप इसके बजाय सतर्क ("$") चाहते थे, तो यह होगा:

prompt %username%@%computername% $P$_$$

बशर्ते आपके लॉगिन खाते में अपेक्षित अनुमति हो, ताकि "निक्सीज़" को "निर्यात" के साथ स्थायी रूप से प्रस्तुत किया जा सके:

export PS1="..."

और DOSsy को इसमें बदलें:

setx PROMPT "%username%@%computername% $P$_$G"

या

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