कमांड और आउटपुट के लिए अलग-अलग रंग


13

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

@USER/Destop$ ----> blue
/*
--------------
output file in white
-----------
*/

धन्यवाद


2
शायद premd_functions का उपयोग करके आप शीघ्र रंग बदल सकते हैं और इसे preexec_functions से पहले सेट कर सकते हैं, या ऐसा कुछ कर सकते हैं। (zsh में, मुझे नहीं पता कि क्या अन्य गोले के लिए एक समान है)
pataluc

मैं सिर्फ अपने सुझाव की कोशिश की, लेकिन मैं कमान रंगीन नहीं मिलता ... :(
pataluc

1
@ पाटलुक: मैं सफल रहा preexec () { echo -n "\\e[40;34m" }; precmdसमारोह IMHO आवश्यक नहीं है, यह zsh फिर सेट करता है शीघ्र प्रदर्शित करने से पहले रंग में ही लगता है। लेकिन यह केवल उन आदेशों के लिए काम करता है जो रंग को स्वयं नहीं बदलेंगे (प्रमुख उदाहरण है ls) जैसा कि आरोन ने बताया है। साथ cat, bc, खोल आदेश, आदि निर्मित (यहां तक कि alpine) इस ठीक काम करता है।
खसखस

@ मैं सफल भी हुआ, सभी आज्ञाओं के साथ, यह मानते हुए कि राज आज्ञा को रंगना चाहता है और परिणाम नहीं, मैंने "\\e[40;34m"अपने PROMPTpreexec () { echo -n "\\e[40;37m" }
संस्करण

1
@ पाटलुक: क्षमा करें, अब मुझे यह बात मिल गई है। कमांड लाइन को कलर करने के लिए बस zle_highlight=(default:fg=cyan)एक हालिया zsh वर्जन के साथ प्रयोग करें । Zsh भी गतिशील रंग प्रदान करता है, जैसे fish; मैन zshzle में CHARACTER हाईलाइटिंग अनुभाग देखें।
खसखस

जवाबों:


5

ज़रुरी नहीं; किसी दिए गए प्रोग्राम के आउटपुट का रंग कमांड द्वारा नियंत्रित किया जाता है, टर्मिनल द्वारा नहीं।

कहा कि, अपने टर्मिनल को रंग के लिए एएनएसआई से बचने के कोड्स को समझता है (सबसे अधिक), आप शीघ्र की शुरुआत में अपने वांछित शीघ्र रंग सेट करने के लिए एस्केप कोड का उपयोग कर सकते हैं, और अंत में अपना वांछित आउटपुट रंग; यह आपकी कमांड लाइनों में भी परिणामित करेगा कि आप आउटपुट के लिए जो भी रंग निर्धारित करते हैं, लेकिन वह संभवतः उतना ही करीब है जितना आप देख रहे हैं। उदाहरण के लिए, निम्नलिखित:

$ export PS1='\[\033[00;35m\]\u\[\033[00m\]@\[\033[00;35m\]\H\[\033[00m\]:\[\033[00;33m\]\W\[\033[00m\] \$\[\033[00;34m '

आपको एक संकेत देगा जो दिखता है:

user@host:wd $ _

बैंगनी में 'उपयोगकर्ता' और 'होस्ट' के साथ, भूरे रंग (गहरे पीले) में 'wd' (आपका cwd) और हल्के नीले रंग के लिए आपके टर्मिनल जो भी उपयोग करता है उसमें '$' के बाद सब कुछ। (एक डिफ़ॉल्ट xterm इसे सियान में प्रस्तुत करेगा; सूक्ति-टर्मिनल को कॉर्नफ़्लॉवर नीले रंग की एक अच्छी छाया के लिए डिफ़ॉल्ट लगता है।)

वास्तविक रंग कोड, जैसा कि बैश के लिए आवश्यक प्रारूप में निर्दिष्ट है, जैसे, वास्तविक रंग विनिर्देश \[\033[00;35m\]कहां 00;35है; अग्रणी 00शायद ही कभी बदलता है, लेकिन IIRC बोल्ड (01), अंडरलाइन (??), और रिवर्स वीडियो (??) प्रभाव पैदा कर सकता है, जबकि अनुगामी '35' वास्तविक रंग है, जो इस मामले में बैंगनी है।

यह आश्चर्यजनक रूप से एएनएसआई रंग कोड की एक सभ्य सूची खोजने के लिए मुश्किल है, लेकिन अग्रभूमि रंग 30 से 37 तक चलते हैं, और पृष्ठभूमि वाले 40 से 47 तक, निम्नानुसार हैं:

color        fg  bg
black        30  40
red          31  41
green        32  42
yellow       33  43
blue         34  44
purple       35  45
cyan         36  46
gray/white   37  47

ध्यान रखें कि, जब से आप अपने प्रॉम्प्ट का अनुसरण करने वाली हर चीज़ के लिए एक डिफ़ॉल्ट रंग सेट कर रहे हैं, आपके द्वारा चलाए जाने वाले प्रोग्राम जो एस्केप कोड के माध्यम से अपने स्वयं के रंग सेट नहीं करते हैं, उस रंग को लेने जा रहे हैं - उदाहरण के लिए, यदि आप एक चलाते हैं पेजर, आपको इसके आउटपुट को उसी रंग में देखने की संभावना है, जिसे आपने अन्य कमांड के लिए सेट किया है। इस बीच, आदेशों जो करते मुक्ति कोड के माध्यम से अपने स्वयं के रंग सेट अपने प्रयासों को पूरी तरह से ध्यान नहीं देगा।


1
भागने के कोड के बजाय, मैंने पाया है कि tputरंगाई के लिए उपयोग करना अधिक पठनीय है। उदाहरण के लिए, मेरा संकेत (बैश में) export PS1="[\t \[$(tput setaf 9)\]\u\[$(tput setaf 15)\]@\[$(tput setaf 12)\]\h \[$(tput sgr0)\]\w ] \$ "जो समय को आउटपुट करता है, फिर एक रंग में उपयोगकर्ता नाम, @दूसरे में और होस्टनाम एक तीसरे (लाल, सफेद, और नीले रंग में), फिर पीडब्ल्यूडी और प्रिंट करता है $ । इतिहास के माध्यम से वापस स्क्रॉल करते समय संकेत पंक्तियों को देखना एक नज़र में बहुत आसान है।
मैटडामो

उर भयानक ... मैं चाहता था कि सभी। धन्यवाद क्या आप मुझे बता सकते हैं कि अगर मैं कभी रंग बदलना चाहता हूं तो मुझे किन मूल्यों को बदलना होगा?
राज

और क्या पिछले एक को वैसा ही रखने का एक तरीका है जैसा कि रंग पहले था?
राज

और परिवर्तन के लिए अनुमति नहीं है, हर बार जब मैं लॉग इन करता हूं, मुझे इसे फिर से
रंगना होगा

1
जब तक आप इसे अपने शेल की इनिशियलाइज़ेशन फ़ाइल में नहीं जोड़ते, तब तक परिवर्तन स्थायी नहीं है, जो कि बैश के लिए है ~/.bashrc; उस पंक्ति को खोजें जहां वह PS1 सेट करता है, जो कि आपका संकेत स्ट्रिंग है, और इसे उत्तर में वर्णित अनुसार संशोधित करें। क्या परिवर्तन करना है यह इस बात पर निर्भर करता है कि आपका शीघ्र स्ट्रिंग कैसे सेट किया गया है, लेकिन मेरे जवाब में अधिकांश मुख्य विवरण हैं, और बाकी को थोड़ा Googling करके पाया जा सकता है। मुझे यकीन नहीं है कि आपका मतलब क्या है "क्या पिछले एक को वैसा ही रखने का एक तरीका है जैसा कि रंग पहले था?"
आरोन मिलर

7

आप आउटपुट को एक प्रोग्राम में पास कर सकते हैं जो कलरिंग करता है। उदाहरण के लिए, ऐसे कार्यक्रम हैं pycolor:

pycolor module.py

अपना खुद का निर्माण करने के लिए:

red="$(tput setaf 1)"
reset="$(tput sgr0)"
echo $'foo\nbar' | sed -e "s/\(bar\)/$red\1$reset/"

रंग उत्पादन पर अधिक।


3

हाँ, मेरे पास यह काम है, कम से कम लिनक्स और मैक ओएस पर।

सबसे पहले, कुछ विशेषता चर सेट करें, और वांछित कमांड लाइन विशेषताओं के साथ टर्मिनल सेट छोड़ने के लिए PS1 प्रॉम्प्ट, उदाहरण के लिए:

bold="\[$(tput bold)\]"
none="$(tput sgr0)"
export PS1="\$ $bold"

फिर, कमांड आउटपुट के पाठ विशेषताओं को बदलने के लिए, हर कमांड से ठीक पहले निष्पादित बाश DEBUG ट्रैप का उपयोग करें:

trap 'echo -ne "${none}"' DEBUG

1

एक अन्य विकल्प (कमांड के आधार पर एक कमांड पर) grc - जेनेरिक कलराइज़र है। नियमित भावों को सेटअप करने में थोड़ा सा काम लगता है जो चीजों को रंग देने के लिए उपयोग करता है। मुझे इसके बारे में पता चला:

/unix/8414/how-to-have-tail-f-show-colored-output?newsletter=1&nlcode=17737|321c

और यहाँ:

/unix/26313/colored-find-output

मैं रीगेक्स के साथ एक फ्लैश नहीं हूं, इसलिए मैंने इन कमांडों के साथ ज्यादा काम नहीं किया है।


मैं अपनी सभी टेल-लॉग स्क्रिप्ट के साथ इसका उपयोग करता हूं। अद्भुत।
स्टेफगोसलिन

1

इन्हें अपनी .bashrc फ़ाइल में फेंक दें और फिर सहेजने के बाद फ़ाइल को स्रोत करें।

blk=$'\x1b[90m' # Sets text to black
red=$'\x1b[31m' # Sets text to red
grn=$'\x1b[92m' # Sets text to green
ylw=$'\x1b[93m' # Sets text to yellow
blu=$'\x1b[94m' # Sets text to blue
pur=$'\x1b[95m' # Sets text to purple
cyn=$'\x1b[96m' # Sets text to cyan
wht=$'\x1b[97m' # Sets text to white
rst=$'\x1b[0m'  # resets to default terminal color

एक बार जब यह हो जाता है, तो आप इनमें से किसी को भी अपने टर्मिनल में स्थायी रूप से उपयोग कर सकते हैं या जब तक कि आप चर को टिप्पणी नहीं करते या उन्हें पूरी तरह से हटा नहीं देते। आप उन्हें अपने मशीन पर या कमांड प्रतिस्थापन या जो भी हो, स्क्रिप्ट में उपयोग कर सकते हैं। यहाँ एक उदाहरण है कि मैं उन्हें व्यक्तिगत रूप से कैसे उपयोग करता हूं:

echo -e "${red}This text is red.${rst}"
printf "${grn}This text is green.\n${rst"

मैं आमतौर पर व्यक्तिगत echoऔर / या printfआदेशों के साथ इनका उपयोग करता हूं, लेकिन आप इनका उपयोग अन्य आदेशों के साथ-साथ कमांड को भी रंग देने के लिए कर सकते हैं ping.bashrcप्रभाव प्राप्त करने के लिए निम्नलिखित जोड़ें । फिर अपनी .bashrcफ़ाइल को स्रोत करें और बैंगनी पाठ के साथ cpingउपयोग करने के लिए कमांड चलाएं ping। आप अपने टर्मिनल समर्थन किसी भी रंग का उपयोग करने के लिए प्रत्येक कमांड फ़ंक्शन सेट कर सकते हैं।

# Add this to your .bashrc file
colored_ping() {

    echo -e "${pur}$(ping $1)${rst}"
}

alias cping='colored_ping'

फिर कोशिश करो:

user@linux:~# cping superuser.com

आपका आउटपुट cpingबैंगनी होगा। यदि आप एक ही आउटपुट में कई रंगों का उपयोग करना चाहते हैं, तो आप उन्हें अनूठे तरीकों से जोड़ सकते हैं। आप इसे कैसे करते हैं यह पूरी तरह आप पर निर्भर है। उदाहरण के लिए:

echo -e "${red}This is red and ${blu}this is blue and ${grn}this is green.${rst}

0

Git हब पर उपलब्ध hl कमांड पर आपकी नज़र होनी चाहिए:
gitub: git clone http://github.com/mbornet-hl/hl
और:
http://www.flashnux.com/notes/page_000022_US.html
hl C में लिखा गया एक linux कमांड है, विशेष रूप से एक टेक्स्ट फाइल या कमांड के आउटपुट को कलर करने के लिए डिज़ाइन किया गया है। आप एक साथ 42 रंगों का उपयोग कर सकते हैं, और कमांड लाइनों को सरल बनाने के लिए एक कॉन्फ़िगरेशन फ़ाइल का उपयोग कर सकते हैं। आप हर उस कमांड के आउटपुट को कलर कर सकते हैं, जिसे दूसरे पर लगाया जा सकता है। और यदि आप जानते हैं कि नियमित अभिव्यक्ति क्या है, तो आपके लिए इसका उपयोग करना बहुत आसान होगा। आप इसका उपयोग कैसे करें, यह समझने के लिए आप मैन पेज का उपयोग कर सकते हैं।

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