कैसे एक उत्पादन बोश में बोल्ड पाठ करता है?


241

मैं एक बैश स्क्रिप्ट लिख रहा हूँ जो स्क्रीन पर कुछ टेक्स्ट प्रिंट करती है:

echo "Some Text"

क्या मैं पाठ को प्रारूपित कर सकता हूं? मैं इसे बोल्ड बनाना चाहूंगा।

जवाबों:


427

ऐसा करने का सबसे संगत तरीका tputटर्मिनल पर भेजने के लिए सही दृश्यों की खोज करना है:

bold=$(tput bold)
normal=$(tput sgr0)

तब आप चर का उपयोग कर सकते हैं $boldऔर $normalचीजों को प्रारूपित कर सकते हैं:

echo "this is ${bold}bold${normal} but this isn't"

देता है

यह साहसिक है, लेकिन यह नहीं है


2
यह बहुत बुरा है। अगर मैं सही तरीके से समझूं, तो यह पलायन सम्मिलित करने के समान है, लेकिन यह अन्य टर्मिनलों में काम करेगा (VT100 नहीं)।
जेम्सरैट

यह सही है - यह TERM के मान के अनुसार उपयुक्त कोड को देखता है।
psmears

2
यदि आपको पाठ को रेखांकित करने की आवश्यकता है, तो आप एक चर जोड़ सकते हैं। ध्यान दें, टिप्पणी प्रारूपण से बैकटिक्स को हटाया जा रहा है। उत्तर में उसी प्रारूप का उपयोग करें। tput smul
UNDERLINE

3
tputकई अलग-अलग कार्यों के लिए बहुत सारी कमांड के साथ एक महान कमांड है।
ड्रू नोक

मैं ओपी क्या कर रहा है, लेकिन एक motdफ़ाइल के साथ कुछ इसी तरह की कोशिश कर रहा हूं । उस उदाहरण में मैं $boldऔर $normalचर को कैसे / कहां परिभाषित करेगा ?
मैट

74

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

echo -e '\033[1mYOUR_STRING\033[0m'

स्पष्टीकरण:

  • इको-ई - -eविकल्प का मतलब है कि बच गए (बैकस्लेस्ड) स्ट्रिंग्स की व्याख्या की जाएगी
  • \ 033 - बचा हुआ क्रम शैली की शुरुआत / समाप्ति को दर्शाता है
  • लोअरकेस m - अनुक्रम के अंत को इंगित करता है
  • 1 - बोल्ड विशेषता (अधिक के लिए नीचे देखें)
  • [० मी - सभी विशेषताओं, रंगों, स्वरूपण आदि को रीसेट करता है।

संभावित पूर्णांक हैं:

  • - सामान्य शैली
  • 1 - बोल्ड
  • 2 - मंद
  • 3 - इटैलिक
  • 4 - रेखांकित
  • 5 - पलक झपकना
  • 7 - उल्टा
  • 8 - अदृश्य

1
अच्छे खर्च। क्या कार्यक्षमता [0mप्रदान करता है के लिए चारों ओर देख रहा था और यह इसे अच्छी तरह से बताता है
जेरेमी

हालांकि यह होना चाहिए\033[0m
जेरेमी

1
3- इटैलिक , कम से कम कोनोलास में
डेविड टैबरेरो एम।

एक इच्छा स्ट्राइकथ्रू को उबंटू और कुछ अन्य लोकप्रिय प्लेटफार्मों पर समर्थित थी।
डार्क स्टार 1

45

मुझे लगता है कि bash एक vt100- संगत टर्मिनल पर चल रहा है जिसमें उपयोगकर्ता ने स्वरूपण के लिए समर्थन को स्पष्ट रूप से बंद नहीं किया था।

सबसे पहले, विकल्प echoका उपयोग करके विशेष वर्णों के लिए समर्थन चालू करें -e। बाद में, एसीसी एस्केप अनुक्रम का उपयोग करें ESC[1m, जैसे:

echo -e "\033[1mSome Text"

उदाहरण के लिए एसीसी से बच दृश्यों पर अधिक: ascii-table.com/ansi-escape-fterences-vt-100.php


धन्यवाद। मुझे भागने के दृश्यों की कुछ अन्य सूचियां मिलीं, लेकिन आप जिस से जुड़े हैं वह बहुत व्यापक है!
जेम्सट्रैट

18
स्ट्रिंग के अंत में बोल्ड फॉर्मेटिंग को रोकने के लिए मत भूलना: echo -e "\033[1mSome Text\033[0m"अन्यथा आपके टर्मिनल की निम्नलिखित लाइनें भी बोल्ड में होंगी
मेमों

यह समाधान PHP-CLI के साथ भी काम करता है, यह अन्य समाधान के खिलाफ एक फायदा है।
डेविड

अगर आपको याद रखने में परेशानी हो तो \033आप इसका उपयोग कर सकते हैं \eजैसेecho -e "\e[1msome text\e[0m"
फेलिप अल्वारेज़

1
जेएस (जावास्क्रिप्ट) में ऑक्टल एस्केप सीक्वेंस की अनुमति है
पैट-लाफ

14

इस तरह सिद्धांत में:

# BOLD
$ echo -e "\033[1mThis is a BOLD line\033[0m"
This is a BOLD line

# Using tput
tput bold 
echo "This" #BOLD
tput sgr0 #Reset text attributes to normal without clear.
echo "This" #NORMAL

# UNDERLINE
$ echo -e "\033[4mThis is a underlined line.\033[0m"
This is a underlined line. 

लेकिन व्यवहार में इसके बजाय "उच्च तीव्रता" रंग के रूप में व्याख्या की जा सकती है।

(स्रोत: http://unstableme.blogspot.com/2008/01/ansi-escape-fterences-for-writing-xtxt.html )

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