पाठ का रंग बदलना और टर्मिनल की पृष्ठभूमि?


72

मैं वरीयता के माध्यम से रंग बदल सकता हूं, लेकिन मैं कमांड लाइन के माध्यम से टर्मिनल का पृष्ठभूमि रंग और पाठ रंग कैसे बदल सकता हूं?


स्थायी रूप से या संयोग से?
जैकब वलीजम

आप भी इस्तेमाल कर सकते हैं dconf। मैंने पहले भी इसी तरह के प्रश्न का उत्तर लिखा है: askubuntu.com/a/628129/295286
सर्जियो कोलोडियाज़नी

\033[00;34mFOO\033[00m
राफेल बैरोस

जवाबों:


50

कुछ XTerm / ANSI- संगत टर्मिनलों (जैसे xtermऔर gnome-terminal) पर, आप बड़े पैलेट का उपयोग करके रंग सेट कर सकते हैं, फिर डिफ़ॉल्ट 8/16-रंग पैलेट (उदाहरण के लिए 88-रंगों, 256-रंगों या 16777216-रंगों (RGB) पैलेट का उपयोग करके ; दोनों 256-रंगों और 16777216-रंग (RGB) पैलेट दोनों xtermका gnome-terminalसमर्थन करते हैं; ध्यान रखें कि शेल इसे ओवरराइड कर सकता है (यह उदाहरण के लिए मामला है zsh)।

यहाँ 256-रंग पैलेट समर्थन के साथ XTerm / ANSI- संगत टर्मिनलों में उनके ANSI रंग कोड के साथ 256-रंग पैलेट में रंगों को सूचीबद्ध करने के लिए एक स्क्रिप्ट दी गई है:

#!/bin/bash
for((i=16; i<256; i++)); do
    printf "\e[48;5;${i}m%03d" $i;
    printf '\e[0m';
    [ ! $((($i - 15) % 6)) -eq 0 ] && printf ' ' || printf '\n'
done

screenshot1

स्क्रीनशॉट

आप अग्रभूमि करने के लिए या पृष्ठभूमि में रंग लागू करना चाहते हैं पर निर्भर करता है, एक का उपयोग <fg_bg>का मूल्य 38या 48निम्न आदेश में (क्रमशः):

printf '\e[<fg_bg>;5;<ANSI_color_code>m'

उदाहरण के लिए, अग्रभूमि रंग ( <fg_bg>= 38) को लाल ( <ANSI_color_code>= 196) और पृष्ठभूमि रंग ( <fg_bg>= 48) को काला ( <ANSI_color_code>= 0) सेट करने के लिए:

printf '\e[38;5;196m Foreground color: red\n'
printf '\e[48;5;0m Background color: black\n'

screenshot3

यह printf '\e[K'पूरी लाइन पर लागू करने के लिए पृष्ठभूमि रंग के लिए और कर्सर पर लागू करने के लिए अग्रभूमि रंग के क्रम में प्रॉम्प्ट को फिर से तैयार करना आवश्यक है:

screenshot4

एक संगत टर्मिनल में एएनएसआई रंग कोड के बजाय आरजीबी मूल्यों का उपयोग करके एक ही चीज को पूरा किया जा सकता है; इस बात पर निर्भर करता है कि आप रंग को अग्रभूमि या पृष्ठभूमि पर लागू करना चाहते हैं , निम्नलिखित कमांड में या (क्रमशः) के <fg_bg>मूल्य का उपयोग करें :3848

printf '\e[<fg_bg>;2;<R>;<G>;<B>m'

उदाहरण के लिए, अग्रभूमि का रंग ( <fg_bg>= 38) लाल ( <R>= 255, <G>= 0, <B>= 0) और पृष्ठभूमि का रंग ( <fg_bg>= 48) काले से ( <R>= 0, <G>= 0, <B>= 0) पर सेट करने के लिए:

printf '\e[38;2;255;0;0m Foreground color: red\n'
printf '\e[48;2;0;0;0m Background color: black\n'

screenshot5

फिर से, printf '\e[K'पूरी लाइन पर लागू करने के लिए पृष्ठभूमि रंग के लिए और कर्सर पर लागू करने के लिए अग्रभूमि रंग के क्रम में प्रॉम्प्ट को फिर से तैयार करना आवश्यक है:

screenshot6

या तो तरीकों का उपयोग करके, आप printf '\e[0m'सभी विशेषताओं को रीसेट करने के लिए उपयोग कर सकते हैं :

screenshot7


1
दोनों xtermऔर gnome-terminal\ e [38/48; 2; R; G; Bm को सही रंग से बचना है; हालाँकि, xtermवास्तविक रंग को इसके 256-रंग के पैलेट में निकटतम गोल करता है। gnome-terminalभागने के क्रम में दिए गए सटीक वास्तविक रंग को प्रदर्शित करता है।
एग्मोंट

2
\ e [के खतरनाक है; कुछ एमुलेटरों (जैसे xterm) में यदि कर्सर बहुत दायें किनारे पर होता है (नेत्रहीन रूप से सबसे दाहिने स्तंभ में प्रदर्शित होता है, लेकिन तार्किक रूप से पहले से ही इससे परे है क्योंकि कोई पात्र पहले से ही सबसे दाहिने स्तंभ में छपा था), तो वह अंतिम अक्षर छीन लिया जाता है। उदाहरण देखें bugzilla.gnome.org/show_bug.cgi?id=740789 या savannah.gnu.org/bugs/?36831
egmont

अपने आप को ठीक करना: यदि आप लाइन की शुरुआत में (या प्रॉम्प्ट की शुरुआत में, बजाय इसके अंत में) ई का उत्सर्जन करते हैं, तो बेशक यह सुरक्षित है। (हालांकि
बहुस्तरीय

@egmont उपयोगी जानकारी के लिए धन्यवाद, मैं देखता हूं कि GNOME Bugzilla पर जो तय के रूप में चिह्नित है, क्या यह मामला है? मैं इस क्षण इसका परीक्षण नहीं कर सकता, इसलिए मैं बाद में जांच करूंगा कि क्या यह अभी भी मामला है (जब तक कि आप पहले जवाब नहीं देते) और उत्तर में उस जानकारी को शामिल करें।
कोस

सूक्ति के नए संस्करणों में टर्मिनल उस चरित्र को नहीं खींचता है। क्या यह सही व्यवहार संदिग्ध है। आखिरकार, ग्राफिकल टर्मिनल एमुलेटर कुछ प्राचीन उपकरणों का अनुकरण कर रहे हैं। क्या हमें उनके बुरे डिजाइन निर्णयों का अनुकरण करना चाहिए (जैसा कि xterm यहाँ करता है), या क्या हमें ओवरराइड करना चाहिए (जैसा कि हम सूक्ति-टर्मिनल में करते हैं)? यह एक कठिन सवाल है जिसका कोई एकल सही उत्तर नहीं है।
14:

33

पूर्वावलोकन कॉलम को छोड़कर इस पृष्ठ पर पाई गई जानकारी :

अनुक्रम एस्केप चरित्र (अक्सर " ^[" या " <Esc>" द्वारा दर्शाए गए ) से बने होते हैं, इसके बाद कुछ अन्य वर्ण होते हैं: ^[FCm"(" FCनीचे दी गई बुलेट सूची में संख्याओं में से एक)।

में bash, Escकोड या तो निम्न में से हो सकता है:

  1. \e
  2. \033 (अष्टाधारी)
  3. \x1B (हेक्साडेसिमल)

नोट 1: " \e[0m" अनुक्रम सभी विशेषताओं (स्वरूपण और रंग) को हटा देता है। प्रत्येक रंगीन पाठ के अंत में इसे जोड़ना एक अच्छा विचार हो सकता है।

नोट 2: अग्रभूमि और पृष्ठभूमि रंग भिन्न हो सकते हैं, टर्मिनल के कॉन्फ़िगरेशन के आधार पर और सभी रंगों का समर्थन नहीं किया जाता है

सेट / रीसेट

  • 0: सभी संशोधक, अग्रभूमि और पृष्ठभूमि विशेषताओं को रीसेट / निकालें: echo -e "\e[0mNormal Text"
  • 1: बोल्ड / उज्ज्वल: echo -e "Normal \e[1mBold"
  • 2: मंद: echo -e "Normal \e[2mDim"
  • 4: रेखांकित: echo -e "Normal \e[4mUnderlined"
  • 5: ब्लिंक (एक्सटर्म को छोड़कर अधिकांश टर्मिनलों में काम नहीं करता है): echo -e "Normal \e[5mBlink"
  • 7: उल्टा / पलटना: echo -e "Normal \e[7minverted"
  • 8: छिपा हुआ (संवेदनशील जानकारी के लिए उपयोगी): echo -e "Normal \e[8mHidden Input"
  • 21: रीसेट / बोल्ड / उज्ज्वल निकालें: echo -e "Normal \e[1mBold \e[21mNormal"
  • 22: रीसेट / मंद निकालें: echo -e "Normal \e[2mDim \e[22mNormal"
  • 24: रीसेट / हटाएं रेखांकित करें: echo -e "Normal \e[4mUnderlined \e[24mNormal"
  • 25: रीसेट / ब्लिंक निकालें: echo -e "Normal \e[5mBlink \e[25mNormal"
  • 27: रीसेट / रिवर्स / रिवर्स निकालें: echo -e "Normal \e[7minverted \e[27mNormal"
  • 28: रीसेट / छिपाएँ निकालें: echo -e "Normal \e[8mHidden \e[28mNormal"

अग्रभूमि

  • 39: डिफ़ॉल्ट (आमतौर पर हरे, सफेद या हल्के भूरे रंग): echo -e "Default \e[39mDefault"
  • 30: काला: echo -e "Default \e[30mBlack"(एक पृष्ठभूमि रंग के साथ सबसे अच्छा संयुक्त echo -e "Default \e[30;107mBlack on white") :
  • 31: लाल (हरे रंग की पृष्ठभूमि के साथ उपयोग नहीं)
  • 32: हरा
  • 33: पीला
  • 34: नीला
  • 35: मैजेंटा / बैंगनी
  • 36: सियान
  • 37: हल्का भूरा
  • 90: अंधेरे भूरा
  • 91: हल्का लाल
  • 92: हल्का हरा
  • 93: पीली रोशनी करना
  • 94: हल्का नीला
  • 95: प्रकाश मैजेंटा / पिंक
  • 96: हल्का हरित - नील
  • 97: सफेद

पृष्ठभूमि

  • 49: डिफ़ॉल्ट पृष्ठभूमि रंग (आमतौर पर काला या नीला)
  • 40: काली
  • 41: लाल
  • 42: हरा
  • 43: पीला
  • 44: नीला
  • 45: मैजेंटा / बैंगनी
  • 46: सियान
  • 47: लाइट ग्रे (सफेद अग्रभूमि के साथ प्रयोग न करें)
  • 100: डार्क ग्रे (काले अग्रभूमि के साथ प्रयोग न करें)
  • 101: हल्का लाल
  • 102: लाइट ग्रीन (सफेद अग्रभूमि के साथ प्रयोग न करें)
  • 103: हल्का पीला (सफेद अग्रभूमि के साथ प्रयोग न करें)
  • 104: लाइट ब्लू (हल्के पीले अग्रभूमि के साथ प्रयोग न करें)
  • 105: प्रकाश मैजेंटा / गुलाबी (प्रकाश अग्रभूमि के साथ प्रयोग न करें)
  • 106: लाइट सियान (सफेद अग्रभूमि के साथ प्रयोग न करें)
  • 107: सफेद (प्रकाश अग्रभूमि के साथ प्रयोग न करें)

अग्रभूमि और पृष्ठभूमि रंग दोनों को एक साथ सेट करने के लिए, थेरेपी फॉर्म का उपयोग करें echo -e "\e[S;FG;BGm"। उदाहरण के लिए: echo -e "\e[1;97;41m"(लाल पृष्ठभूमि पर बोल्ड सफेद अग्रभूमि)

256 रंग विकल्पों के लिए, स्रोत पृष्ठ देखें।


30

एक आकस्मिक आधार पर रंग बदलें

यदि यह एक आकस्मिक आधार पर रंग बदलने के लिए है :

आप सेटरम कमांड का उपयोग कर सकते हैं :

setterm -term linux -back <background_colour> -fore <text_color> -clear

रंगों से, आप (सामने और पृष्ठभूमि दोनों) से चुना जा सकता है:

black|blue|green|cyan|red|magenta|yellow|white|default

अधिक विकल्पों के लिए:

setterm -help

अपनी प्रोफ़ाइल (रंग) सेटिंग बदलें

14.04 में, मुझे dconfरंग या टर्मिनल सेट करने के लिए उपयोग करने का विकल्प नहीं मिला । आप हालांकि उपयोग कर सकते हैंgconftool

  • आपको पहले अपना प्रोफ़ाइल नाम प्राप्त करना होगा:

    gconftool-2 --get /apps/gnome-terminal/global/profile_list
    
  • फिर, अपनी प्रोफ़ाइल के टेक्स्ट रंग सेट करने के लिए:

    gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/foreground_color" --type string "#FFFFFF"
    

    उदाहरण के लिए पाठ का रंग सफेद पर सेट करने के लिए

    पृष्ठभूमि रंग के साथ ही:

    gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string "#000000"
    

    उदाहरण के लिए पृष्ठभूमि का रंग काला करने के लिए

बाह्य रूप से, रंग का नाम निर्धारित करने के लिए, आप बस उसी पट्टिका से सेटरम कमांड के रूप में उपयोग कर सकते हैं whiteया कर सकते हैं green, जैसे:

gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string black

1
प्रारंभिक सेटरम कमांड में उन पर डबल डैश होना चाहिए।
user1770201

14.04 पर काम किया, लेकिन 16.04 पर नहीं (बीटा; निश्चित नहीं कि अगर इसका कारण है) ... फिर भी, dconf write /org/gnome/terminal/legacy/profiles:/:<profile_id>/background-color "'rgb(0,0,0)'"चाल चली।
जनक बंदारा १

Ubuntu 1704 पर काम नहीं कर रहा है, यह बुरा लग रहा है
मोम पिंजरे

1
gconftool-2, या (Ubuntu 14.04 और हो सकता है कुछ निम्नलिखित रिलीज के लिए) dconfया gsettingsउबंटू परिवर्तन GNOME टर्मिनल की सेटिंग के नए संस्करणों पर, और पर तुरंत प्रभावी हो सभी टैब और एक ही प्रोफ़ाइल की खिड़कियों। मुझे नहीं लगता कि ओपी इस व्यवहार की तलाश कर रहे थे।
एग्मोंट

5

रंगीन आउटपुट प्राप्त करने के लिए उपयोग किए जाने वाले विभिन्न रंग कोड रंगीन पृष्ठभूमि प्राप्त करने के लिए भी उपयोग किए जा सकते हैं :

40  black
41  red
42  green
43  yellow
44  blue
45  magenta
46  cyan
47  white

इसलिए, निम्न आदेश मेरी पृष्ठभूमि को लाल कर देता है:

$ echo -e '\e[0;41m'

शेल, टर्मिनल एमुलेटर आदि के आधार पर, आपको शेल की आवश्यकता नहीं हो सकती है -e


3

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

एक अन्य दृष्टिकोण, कुछ टर्मिनल एमुलेटर द्वारा समर्थित है, टर्मिनल के डिफ़ॉल्ट अग्रभूमि और OSC 10/11 एस्केप अनुक्रमों का उपयोग करके पृष्ठभूमि के रंगों के सटीक RGB मानों को फिर से परिभाषित करना है :

echo -ne '\e]10;#123456\e\\'  # set default foreground to #123456
echo -ne '\e]11;#abcdef\e\\'  # set default background to #abcdef

यह बहुत लंबे समय तक चलने की संभावना है (जब तक कि एक और OSC 10/11 द्वारा अधिग्रहित न हो या OSC 110/111 के माध्यम से रीसेट न हो), लेकिन dconf दृष्टिकोण के विपरीत, यह अभी भी केवल वर्तमान टर्मिनल को प्रभावित करता है।

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