एक बैश अनुक्रम '\ 033 [999D' का क्या अर्थ है और इसे कहाँ समझाया गया है?


19

मुझे इस तरह के बैश सीक्वेंस मिले हैं \033[999Dऔर \033[2K\rजिनका उपयोग टर्मिनल पर प्रिंटआउट पर कुछ हेरफेर करने के लिए किया जाता है। लेकिन इन दृश्यों का क्या मतलब है? मुझे इन दृश्यों के अर्थ का पता लगाने में मदद करने के लिए वेब पर एक सूची / सारांश कहां मिल सकता है?


3
ये टर्मिनल सीक्वेंस हैं, न कि सीक्वेंस। उनके फ़ंक्शन को निर्धारित करने के लिए आपको अपने टर्मिनल प्रलेखन को देखने की आवश्यकता है।
क्रिस डाउन

1
वे क्रम आउटपुट को रंग देने का काम करते हैं। जांच करें: stackoverflow.com/questions/16845699/… और stackoverflow.com/questions/5947742/…
adizere

1
@adizere सभी एस्केप अनुक्रम रंग परिवर्तन नहीं करते हैं। इस क्यू में अनुक्रम लाइन हेरफेर और कर्सर आंदोलन के लिए हैं, रंग नहीं।
केसी

जवाबों:


32

यह लिंक देखें http://www.termsys.demon.co.uk/vtansi.htm । जैसा कि एंथन कहते हैं, \033 पलायन चरित्र के लिए सी-स्टाइल ऑक्टल कोड है। [999Dकर्सर वापस ले जाता है 999 कॉलम, लाइन के शुरू होने से होने का शायद एक जानवर बल तरीका है। [2Kवर्तमान लाइन मिटा देता है। \rएक कैरिज रिटर्न है जो कर्सर को वर्तमान लाइन की शुरुआत में ले जाएगा और टर्मिनल नियंत्रण अनुक्रम के बजाय सी-स्टाइल एस्केप अनुक्रम है।

अपडेट करें

जैसा कि अन्य लोगों ने बताया है, ये नियंत्रण अनुक्रम bashस्वयं करने के लिए कुछ नहीं हैं , बल्कि टर्मिनल डिवाइस / एमुलेटर पर पाठ प्रकट होता है। एक बार इन अनुक्रमों के लिए हार्डवेयर के एक पूरी तरह से अलग टुकड़े द्वारा व्याख्या की जानी आम थी। मूल रूप से, हर एक कोड के पूरी तरह से अलग सेट का जवाब देगा। इससे निपटने के लिए termcapऔर terminfoपुस्तकालय जहां कई टर्मिनलों के साथ संगत कोड लिखते थे। tputआदेश के लिए एक इंटरफेस है terminfoपुस्तकालय ( termcapसमर्थन भी संकलित किया जा सकता है) और एक और अधिक मजबूत तरीका संगत दृश्यों बनाने के लिए है।

उस ने कहा, एएनएसआई X3.64 या ECMA-48 मानक भी है। कोई भी आधुनिक टर्मिनल कार्यान्वयन इसका उपयोग करेगा। terminfoऔर termcapअभी भी प्रासंगिक हैं क्योंकि कार्यान्वयन अधूरा हो सकता है या इसमें गैर मानक एक्सटेंशन शामिल हो सकते हैं, हालांकि अधिकांश उद्देश्यों के लिए यह मान लेना सुरक्षित है कि आम ANSI क्रम काम करेगा।

xterm पूछे जाने वाले प्रश्न आधुनिक टर्मिनल emulators के बीच मतभेद पर कुछ रोचक जानकारी प्रदान करता है (कई बस का अनुकरण करने की कोशिश xtermमें ही) और कैसे xtermदृश्यों VT100 टर्मिनलों ऊपर के लिंक में वर्णित से संबंधित हैं। यह नियंत्रण अनुक्रमों कीxterm एक निश्चित सूची भी प्रदान करता है ।

आमतौर पर पाठ्यक्रम का उपयोग लिनक्स कंसोल है, इसके लिए नियंत्रण अनुक्रमों की एक निश्चित सूची man console_codesएक तुलना के साथ मिल सकती है xterm


आपके द्वारा जोड़ा गया लिंक सिर्फ वह पृष्ठ है जिसकी मुझे तलाश थी।
एलेक्स

@ एलेक्स ग्लैड मैंने इसे स्वयं पाया, अधिकांश पृष्ठ मैंने केवल कवर रंग देखे हैं और किसी भी तरह वास्तव में पढ़ने के लिए जटिल हैं। यह अच्छा और सरल है।
ग्रीम

सावधान रहें कि भागने के कोड की कार्रवाई टर्मिनल के प्रकार पर निर्भर करती है (और आप आधुनिक स्क्रीन / ओएस पर कई प्रकार के टर्मिनल का अनुकरण कर सकते हैं)। आप tputअधिक पोर्टेबिलिटी होने के बजाय, आदेशों का उपयोग कर सकते हैं , iirc (लेकिन अपने टर्मिनल की बारीकियों के कम कवरेज की कीमत पर)। VT100 (वह पृष्ठ जिसके बारे में बात करता है) कई (लेकिन सब कुछ समर्थित नहीं है, मुझे विश्वास है ...) द्वारा समर्थित है। लेकिन आपका TERM वेरिएबल कुछ अन्य टर्मिनल पर सेट किया जा सकता है, और यह कुछ कमांड के प्रभाव को प्रभावित कर सकता है
Olivier Dulac

@ ऑलिवर, सही tputएक अधिक मजबूत तरीका है। लेकिन यह विशिष्ट VT100 टर्मिनल के बजाय ANSI संगतता है जो अब काफी सर्वव्यापी है, हालांकि मुझे लगता है कि यह xtermएक मोड में सेट करना संभव है जो उन्हें स्वीकार नहीं करता है। मुझे लगता है कि मैं इस पर कुछ और जानकारी के साथ अद्यतन करेंगे।
ग्रीम

@ ऑलिवियर बहुत सारे टर्मिनल एमुलेटर भी सेट हैं TERM=xterm, लेकिन सब कुछ लागू नहीं xtermकरता है।
ग्रीम

5

\033एस्केप वर्ण है, और उन अनुक्रम बैश विशिष्ट नहीं हैं, लेकिन टर्मिनल (सॉफ्टवेयर या हार्डवेयर (नेटवर्क या सीरियल लाइन) के माध्यम से) जिसमें (बैश) कार्यक्रम रन से व्याख्या की। ऐसे कई क्रम हैं

प्रत्येक क्या करता है, टर्मिनल पर निर्भर करता है जिसके लिए यह निर्भर है, और टर्मिनल के राज्य को बदलने वाले किसी भी पिछले अनुक्रम पर भी निर्भर हो सकता है।

इन्हें अक्सर बैश प्रॉम्प्ट में रंग सेट करने के लिए उपयोग किया जाता है , लेकिन मुझे उस पृष्ठ पर आपके विशेष उदाहरण नहीं मिले।


3

'\ 033 [999D' मजाकिया है। कुछ टर्मिनल बच के क्रम से कम को लागू करते हैं, इसलिए यदि किसी की '033 [1G', '\ 033 [1; 1H', '\ 033 [1; 1f', या '\ r' में से कोई भी व्यवहार नहीं करता है, तो इसकी आवश्यकता हो सकती है; चाहिए, लेकिन कौन एक हजार-कॉलम पाठ प्रदर्शन का उपयोग करता है? इन दृश्यों का लिनक्स में एक मैन पेज है: कंसोल_कोड (4) । bjh21 में सभी कोड की एक विस्तृत सूची है । किस प्रोग्राम के आधार पर '\ 033' पर अधिक स्पष्ट प्रतिस्थापन '\ e' उपलब्ध हो सकता है।

यह वास्तव में इरादा नहीं है कि इनका सीधा उपयोग किया जाए - टर्मिनल कंट्रोल कमांड जारी करने का सही तरीका एब्सट्रैक्शन लेयर जैसे ncurses - के साथ है, लेकिन ये सिर्फ स्ट्रिंग लिटरल्स से ही काम करते हैं।


अच्छी बात है, मैंने अभी यह मान लिया है कि \033[999Dपिछली लाइन (ओं) पर बैकअप होगा। हालांकि, डोडी कोडिंग का परिणाम हो सकता है;) आप bashसीधे बच के कोड की व्याख्या भी कर सकते हैं, जैसे$'\033[999D'
ग्रीम

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