इको कमांड स्क्रिप्ट में रंग विकल्प के साथ और कमांड अलग तरीके से काम करता है


15

अगर मैं echo -e "\e[1;31mThis is red text\e[0m"कॉमैंड लाइन में चलता हूं , तो यह रेड टेक्स्ट को प्रिंट करता है।

हालाँकि, अगर मैं इसे स्क्रिप्ट फ़ाइल में लिखता हूँ test.sh

#! /bin/bash
echo -e "\e[1;31mThis is red text\e[0m"

Daud $ sh test.sh

यह प्रिंट करता है -e \e[1;31mThis is red text\e[0m

वे अलग तरह से कार्य क्यों करते हैं?

जवाबों:


29

echoबैश और डैश ( /bin/sh) में निर्मित शेल है । यदि आप echoकमांड लाइन से भागते हैं तो आप बैश बिलिन का उपयोग कर रहे हैं, यदि आप अपने शेल स्क्रिप्ट को अपने साथ चला shरहे हैं तो डैश डैश का उपयोग कर रहे हैं।

डैश संस्करण का विकल्प echoनहीं पता है, -eलेकिन \सिक्वेंस के लिए किसी भी विशेष हैंडलिंग के बिना बस कुछ भी शब्दशः आउटपुट करता है ।

या तो अपने शेल स्क्रिप्ट को चलाने के लिए बैश का उपयोग करें, या /bin/echoइसके बजाय का उपयोग करें echo:

/bin/echo -e "\e[1;31mThis is red text\e[0m"

echoआप के printfबजाय विभिन्न संस्करणों के साथ समस्याओं से बचने के लिए उपयोग करना चाहते हो सकता है । echo printfहमेशा \दृश्यों की व्याख्या करने के विपरीत, लेकिन स्वचालित रूप से अंत में एक लाइनफीड नहीं जोड़ता है, इसलिए \nयदि आप एक चाहते हैं तो आपको अंत में जोड़ना होगा ।

कुछ संस्करणों के रूप में आपको इसके बजाय उपयोग printfनहीं \eकरना चाहिए \033:

printf "\033[1;31mThis is red text\033[0m\n"

यह काम करता हैं। /bin/echoपानी का छींटा ( /bin/sh) और मार के साथ; echoबैश के साथ या ./tes.shदोनों सही ढंग से काम करता है। नीचे दिए गए कोड के साथ bashही काम करता है अगर [$ UID -ne 0]; तब गूंज "नॉट रूट यूजर" बाकी गूंज "रूट यूजर" फाई
qingfeng

1

इसे साथ न चलाएँ sh test.sh, यह पाठ को सफ़ेद रंग में प्रिंट करता है, जैसे आपने कहा था। स्क्रिप्ट बनाने के बाद, इसे चलाकर निष्पादन योग्य बनाएं,

sudo chmod +x /path/test.sh

यहाँ छवि विवरण दर्ज करें

स्क्रिप्ट को चलाएं sudo, जैसे sudo ./test.shया ./test.shदोनों काम करेंगे।

या

के साथ स्क्रिप्ट चलाएँ bash,

bash /path/test.sh

मैं चलाता हूं chmod a+x test.sh, यह पाठ को रंग में प्रिंट करता है। अंतर क्या है। लिनक्स में क्या हुआ ./test.shउसके बराबर होना चाहिए sh test.sh?
क्विंगफ़ेंग

स्क्रिप्ट चलाते समय आपको श का उपयोग नहीं करना पड़ता है, आपने स्क्रिप्ट को बैश इंटरप्रेटर से बनाया है #! /bin/bashताकि आपको उपयोग करना पड़ेbash test.sh
अविनाश राज

और .इसका मतलब वर्तमान निर्देशिका भी है।
अविनाश राज

स्क्रीनशॉट देखें, मेरी टेस्ट.श फ़ाइल को डेस्कटॉप के अंदर रखा गया है। क्या मैं उस डेस्कटॉप फ़ोल्डर में चला गया और फिर मैं दौड़ता हूं ./test.sh, आखिरकार यह काम करता है। कृपया ध्यान रखें कि स्क्रिप्ट को .केवल तभी चलाएं जब इसे वर्तमान निर्देशिका के अंदर प्रस्तुत किया गया था।
अविनाश राज

1

इसके लिए सही प्रारूप में सही कमांड की जरूरत है।

उचित प्रतिध्वनि कथन: echo "Hello World!"

रंग के साथ उचित इको स्टेटमेंट: echo "\e[1;31mHello World!\e[0m"

बैश स्क्रिप्ट में रंग जोड़ना उन बहुत ही सरल लेकिन आसानी से भ्रमित करने वाली चीजों में से एक है। =)

यह साइट आपको यह सब स्पष्ट रूप से समझाने में मदद कर सकती है। मैं अक्सर इसे संदर्भ के रूप में उपयोग करता हूं, क्योंकि सभी सही रंग कोड को कौन याद रख सकता है? जबरदस्त हंसी

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