जवाबों:
स्ट्रिंग वास्तव में है \033[
और यह पूरी बात नहीं है।
उसके बाद ओपनिंग ब्रैकेट में संख्याओं और प्रतीकों की एक श्रृंखला आती है। इस स्ट्रिंग को एस्केप सीक्वेंस के रूप में जाना जाता है और इसका इस्तेमाल कंसोल के कर्सर और टेक्स्ट कलर को नियंत्रित करने के लिए किया जाता है।
नॉन-प्रिंटिंग एस्केप सीक्वेंस को संलग्न किया जाना है
\[\033[ and \]
यदि भागने का क्रम टेक्स्ट के रंग को नियंत्रित कर रहा है, तो इसका अनुसरण ए द्वारा किया जाएगा m
।
यहाँ रंग अनुक्रम के लिए एक तालिका है:
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
इसलिए, यदि आप चाहते हैं कि आपका कंसोल शीघ्र नीला हो जाए, तो आप निम्नलिखित एस्केप सीक्वेंस का उपयोग करेंगे (फ़ाइलनाम में मैं भूल रहा हूं):
\[\033[34m\]
(नोटिस m
)
यह भागने का क्रम केवल रंग को नियंत्रित नहीं करता है, हालांकि। यह कर्सर की गति को भी नियंत्रित कर सकता है। यहां आंदोलन कोड के साथ एक तालिका / सूची है और वे कैसे काम करते हैं:
स्थिति कर्सर:
\033[<L>;<C>H
या
\033[<L>;<C>f
कर्सर को L और कॉलम C की रेखा पर रखते हैं।
कर्सर को N लाइनों तक ले जाएँ:
\033[<N>A
कर्सर को N लाइनों से नीचे ले जाएँ:
\033[<N>B
कर्सर को एन कॉलम पर ले जाएं:
\033[<N>C
कर्सर को पिछड़े N कॉलम में ले जाएँ:
\033[<N>D
स्क्रीन को साफ़ करें, (0,0) पर जाएँ:
\033[2J
लाइन के अंत में मिटाएँ:
\033[K
कर्सर स्थिति सहेजें:
\033[s
कर्सर स्थिति बहाल करें:
\033[u
बस इस बात से अवगत रहें कि आपके द्वारा उपयोग किए जाने वाले टर्मिनल एमुलेटर में अंतिम दो काम नहीं कर सकते हैं। जाहिर है, केवल xterm
और nxterm
उन दो दृश्यों का उपयोग करें।
और इनमें से एक एस्केप सीक्वेंस का उपयोग करके उदाहरण दें: कहते हैं कि मैं अपने कर्सर को पंक्ति 3, कॉलम (वर्ण) 9 पर रखना चाहता हूं। इसके लिए, मैं उपयोग करूंगा
\[033\[3;9H]
(मैं मान रहा हूं कि कॉलम 0 पहली स्थिति है, इसलिए यह 8 वां वर्ण होगा)।
स्रोत: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (इसे भी पढ़ें 6.1)
अधिक सामान्य पढ़ने: http://ascii-table.com/ansi-escape-fterences.php
विकिपीडिया: https://en.wikipedia.org/wiki/ANSI_escape_code
[2K
कर्सर से पहले और बाद में पूरी लाइन मिटा देता है। एक बेहतर स्रोत विकिपीडिया लेख होगा, या आप सीधे ECMA-48 , अनुभाग 8.3.117 SGR पर जा सकते हैं - ग्राफिक संशोधन चुनें ।
0;
रंग अनुक्रमों में अग्रणी अनावश्यक है। वह केवल अग्रभूमि सेट करने से पहले पृष्ठभूमि के रंग को डिफ़ॉल्ट बनाता है। तुम भी पृष्ठभूमि के साथ सेट कर सकते हैं 4x
।
वे टर्मिनल के लिए नियंत्रण आदेश हैं।
टर्मिनल मूल रूप से एक सीरियल पोर्ट से जुड़े डंबल डिवाइस थे , न कि उन फैंसी मल्टी-टैब जीयूआई सॉफ्टवेयर, जो अब हमारे पास हैं। चूंकि उन्हें केवल पात्रों (बाइट्स) की एक धारा मिली थी, डेटा (स्क्रीन पर क्या प्रिंट करना है) और कमांड (इसे कैसे प्रिंट करना है) के बीच कोई स्पष्ट अलगाव नहीं था। इसके बजाय आदेशों को विशेष नियंत्रण वर्णों के साथ दर्शाया जाता है।
स्पष्ट नियंत्रण वर्ण लाइन फीड (न्यूलाइन), बैकस्पेस और बेल बीप जैसे सामान हैं, लेकिन अधिक विशिष्ट कमांड वर्णों के अनुक्रम के रूप में दिए गए हैं, जो ESC
चरित्र के साथ शुरू होते हैं (कोड 27 दशमलव में, हेक्स में 0x1 बी, या 033 ओक्टल)। यह अक्सर आपके उदाहरण में ^[
या के \033
रूप में दर्शाया जाता है ।
अनुक्रम ESC [
को CSI, या नियंत्रण अनुक्रम परिचयकर्ता कहा जाता है, और यह वैकल्पिक संख्यात्मक मापदंडों के साथ एक कमांड शुरू करता है, आमतौर पर एक पत्र जो मुख्य कमांड को परिभाषित करता है, में समाप्त होता है। इस वर्ग में ज्यादातर आम भागने के क्रम गिरते हैं।
भागने के कोड की सूची उदाहरण के लिए console_codes(4)
मैन पेज में पाई जा सकती है , और एएनएसआई से बचने के कोड के लिए विकिपीडिया पेज पर ।
कुछ उदाहरण:
ESC [ 4 A move cursor 4 lines up (4 can be any number)
ESC [ 5 B move cursor 5 lines down
ESC [ 2 K erase current line
ESC [ 30;46 m set black text (30) on cyan background (46)
ESC [ 0 m reset color and attributes
आप उदाहरण बैश के साथ आदेशों का परीक्षण कर सकते हैं। -e
ध्वज का उपयोग करते हुए , अंतर्निहित echo
कमांड चरित्र के \033
प्रतिनिधित्व के रूप में स्वीकार करता है ESC
।
उदाहरण के लिए, यह स्क्रीन के मध्य में रंग में एक ग्रीटिंग और मूल कर्सर स्थिति में सामान्य रूप से प्रिंट करेगा:
echo -e '\033[s\033[12;30f\033[30;46m Hello! \033[0m\033[uhello'
ESC ]
आपके द्वारा उल्लिखित अनुक्रम OSC या ऑपरेटिंग सिस्टम कमांड है, जिसका उपयोग ज्यादातर कमांड में विंडो शीर्षक xterm
और अन्य को सेट करने के लिए किया जाता है , जैसे:
echo -e '\033]0;new window title\a'
उसके बाद ESC ( A
(और अन्य पत्र) भी हैं जो कुछ वर्णों पर राष्ट्रीय चरित्र सेट करते हैं, एक संभावित उल्लसित प्रभाव के लिए ।
ऑपरेटिंग सिस्टम कमांड ( ) escape]
को शुरू करने के लिए दाएं वर्ग ब्रैकेट के बाद एस्केप का उपयोग किया जाता है ।OSC
यह ECMA-48 में है , और आप टर्मिनल विंडो का शीर्षक बदलने के लिए XTerm कंट्रोल सीक्वेंस , जैसे, में xterm द्वारा उपयोग किए जाने वाले नियंत्रण अनुक्रमों का सारांश पढ़ सकते हैं।
एस्केप सीक्वेंस अलग-अलग किरदारों से शुरू हो सकते हैं। सी 1 (8-बिट) नियंत्रण वर्ण XTerm नियंत्रण दृश्यों में खंड उन लोगों में से कुछ का उल्लेख है: CSI
(जो आप के रूप में देखते escape[
, APC
, DCS
, PM
। अलग (दूसरा) चरित्र के लिए कारण है क्योंकि जोड़ी (बचने और है ]
) एक साथ जुड़ा हुआ है सिंगल-बाइट कंट्रोल कैरेक्टर का उपयोग विभिन्न प्रकार के एस्केप सीक्वेंस के लिए किया जाता है ।
यदि आप विनिर्देश के माध्यम से पढ़ते हैं, तो आप नोटिस करेंगे कि CSI
संख्यात्मक मापदंडों के साथ नियंत्रण के लिए उपयोग किया जाता है, जबकि OSC
तार की अनुमति देता है। परे सिर्फ वाक्य रचना, समिति जो इस मानक बनाया के लिए मन का उपयोग करता है में था APC
और PM
जो से मतभेद DCS
और OSC
।
इन्हें ANSI एस्केप कोड कहा जाता है , और वे कंसोल पेज के लिए मैन पेज में सूचीबद्ध होते हैं । वे बैश-विशिष्ट नहीं हैं, बल्कि किसी भी कंसोल एप्लिकेशन में काम करते हैं जब तक कि टर्मिनल उन्हें समर्थन करता है (अधिकांश टर्मिनल एमुलेटर करते हैं)।
अन्य उत्तरों में वर्णित "एस्केप सीक्वेंस" इस बात पर निर्भर करता है कि आपके पास कौन सा टर्मिनल टाइप है (सबसे अधिक बार "एएनएसआई" या व्युत्पन्न / समान)।
$ echo $TERM
xterm
यदि आप ऐसी लिपियों को लिखना चाहते हैं जो (कुछ) दीमक की संज्ञा हैं, लेकिन फिर भी उदा रंग और अन्य विशेष विशेषताओं का उपयोग करती हैं, तो इनकी सामग्री पर एक नज़र डालें man terminfo
।
जैसे
$ echo -n ".";tput setb 6;tput setf 4;echo -n "test";tput sgr0;echo "."
पीले रंग की पृष्ठभूमि और लाल अग्रभूमि रंग के .test.
साथ प्रिंट करेगा test
, और यह किसी भी टर्मिनल के लिए काम करेगा जो वास्तव में उसी तरह से रंगों का उपयोग करने में सक्षम है।
में देखने के लिए क्या वास्तव में छपा है, पाइप यह od -t x1z
के रूप में
$ tput sgr0 | od -t x1z
0000000 1b 28 42 1b 5b 6d >.(B.[m<
0000006
... जहां मान हेक्साडेसिमल ("एक्स" के कारण) में दिखाए जाते हैं।