किस तरह के सीक्वेंस से बचना है सीक्वेंस "\ 033" से शुरू


19

मुझे बैश से शुरू होने वाले कई एस्केप सीक्वेंस मिले \033], लेकिन ये सीक्वेंस क्या हैं और क्यों शुरू हो रहे हैं \033]?

जवाबों:


25

स्ट्रिंग वास्तव में है \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



2
ध्यान दें कि '\ 033' अष्टक में ESCAPE वर्ण है, इसलिए इसे दशमलव (27) या हेक्स (0x1B) में दिया जा सकता है। ESCAPE लिखने के अन्य सामान्य तरीके हैं, उदाहरण के लिए शेल स्क्रिप्ट्स में '^ [',
बिंडकी

1
कृपया ध्यान दें कि उस तालिका में कई प्रविष्टियाँ भ्रामक या गलत हैं: बोल्ड, बेहोश, रेखांकित करना आदि को स्वतंत्र रूप से सेट और रीसेट किया जा सकता है, और रंगों के साथ 0 से रीसेट भी किया जाता है; पृष्ठभूमि के लिए कोड (40-49) की एक पूरी अलग सेट है, और 7 बजाय अग्रभूमि और पृष्ठभूमि स्वैप; ईएससी [2Kकर्सर से पहले और बाद में पूरी लाइन मिटा देता है। एक बेहतर स्रोत विकिपीडिया लेख होगा, या आप सीधे ECMA-48 , अनुभाग 8.3.117 SGR पर जा सकते हैं - ग्राफिक संशोधन चुनें
डेल्टाब

निम्न वाक्यों में से प्रत्येक के अंत में वाक्यांश "'m' वर्ण को cplusplus.com पर एक स्टॉप कैरेक्टर के रूप में प्रयोग किया जाता है। पोस्ट भी थोड़ा भ्रामक है, क्योंकि नीचे दी गई तालिका में कमांड हैं जो स्पष्ट रूप से एक द्वारा समाप्त नहीं किए गए हैं "म"। वास्तव में यह और भी अधिक भ्रामक लगता है जब शीर्ष पर सही प्रस्तुत किया जाता है।
ilkachachu

1
तकनीकी रूप से, 0;रंग अनुक्रमों में अग्रणी अनावश्यक है। वह केवल अग्रभूमि सेट करने से पहले पृष्ठभूमि के रंग को डिफ़ॉल्ट बनाता है। तुम भी पृष्ठभूमि के साथ सेट कर सकते हैं 4x
निधि मोनिका का मुकदमा

17

वे टर्मिनल के लिए नियंत्रण आदेश हैं।

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

स्पष्ट नियंत्रण वर्ण लाइन फीड (न्यूलाइन), बैकस्पेस और बेल बीप जैसे सामान हैं, लेकिन अधिक विशिष्ट कमांड वर्णों के अनुक्रम के रूप में दिए गए हैं, जो 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(और अन्य पत्र) भी हैं जो कुछ वर्णों पर राष्ट्रीय चरित्र सेट करते हैं, एक संभावित उल्लसित प्रभाव के लिए


8

ऑपरेटिंग सिस्टम कमांड ( ) escape]को शुरू करने के लिए दाएं वर्ग ब्रैकेट के बाद एस्केप का उपयोग किया जाता है ।OSC

यह ECMA-48 में है , और आप टर्मिनल विंडो का शीर्षक बदलने के लिए XTerm कंट्रोल सीक्वेंस , जैसे, में xterm द्वारा उपयोग किए जाने वाले नियंत्रण अनुक्रमों का सारांश पढ़ सकते हैं।

एस्केप सीक्वेंस अलग-अलग किरदारों से शुरू हो सकते हैं। सी 1 (8-बिट) नियंत्रण वर्ण XTerm नियंत्रण दृश्यों में खंड उन लोगों में से कुछ का उल्लेख है: CSI(जो आप के रूप में देखते escape[, APC, DCS, PM। अलग (दूसरा) चरित्र के लिए कारण है क्योंकि जोड़ी (बचने और है ]) एक साथ जुड़ा हुआ है सिंगल-बाइट कंट्रोल कैरेक्टर का उपयोग विभिन्न प्रकार के एस्केप सीक्वेंस के लिए किया जाता है ।

यदि आप विनिर्देश के माध्यम से पढ़ते हैं, तो आप नोटिस करेंगे कि CSIसंख्यात्मक मापदंडों के साथ नियंत्रण के लिए उपयोग किया जाता है, जबकि OSCतार की अनुमति देता है। परे सिर्फ वाक्य रचना, समिति जो इस मानक बनाया के लिए मन का उपयोग करता है में था APCऔर PMजो से मतभेद DCSऔर OSC


7

इन्हें ANSI एस्केप कोड कहा जाता है , और वे कंसोल पेज के लिए मैन पेज में सूचीबद्ध होते हैं । वे बैश-विशिष्ट नहीं हैं, बल्कि किसी भी कंसोल एप्लिकेशन में काम करते हैं जब तक कि टर्मिनल उन्हें समर्थन करता है (अधिकांश टर्मिनल एमुलेटर करते हैं)।


1

अन्य उत्तरों में वर्णित "एस्केप सीक्वेंस" इस बात पर निर्भर करता है कि आपके पास कौन सा टर्मिनल टाइप है (सबसे अधिक बार "एएनएसआई" या व्युत्पन्न / समान)।

$ 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

... जहां मान हेक्साडेसिमल ("एक्स" के कारण) में दिखाए जाते हैं।

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