मुझे रूबी और जावास्क्रिप्ट जैसी भाषाओं में पुस्तकालयों के बारे में पता है, ताकि "लाल" जैसे रंग नामों का उपयोग करके अपनी टर्मिनल लिपियों को आसान बनाया जा सके।
लेकिन क्या बाश, या क्ष, या जो भी है, में शेल स्क्रिप्ट के लिए ऐसा है?
मुझे रूबी और जावास्क्रिप्ट जैसी भाषाओं में पुस्तकालयों के बारे में पता है, ताकि "लाल" जैसे रंग नामों का उपयोग करके अपनी टर्मिनल लिपियों को आसान बनाया जा सके।
लेकिन क्या बाश, या क्ष, या जो भी है, में शेल स्क्रिप्ट के लिए ऐसा है?
जवाबों:
आप अपनी बैश लिपियों में रंगों को इस तरह परिभाषित कर सकते हैं:
red=$'\e[1;31m'
grn=$'\e[1;32m'
yel=$'\e[1;33m'
blu=$'\e[1;34m'
mag=$'\e[1;35m'
cyn=$'\e[1;36m'
end=$'\e[0m'
और फिर उन्हें अपने आवश्यक रंगों में प्रिंट करने के लिए उपयोग करें:
printf "%s\n" "Text in ${red}red${end}, white and ${blu}blue${end}."
आप tput
OR का उपयोग कर सकते हैंprintf
का उपयोग कर tput
,
बस नीचे के रूप में फ़ंक्शन बनाएँ और उनका उपयोग करें
shw_grey () {
echo $(tput bold)$(tput setaf 0) $@ $(tput sgr 0)
}
shw_norm () {
echo $(tput bold)$(tput setaf 9) $@ $(tput sgr 0)
}
shw_info () {
echo $(tput bold)$(tput setaf 4) $@ $(tput sgr 0)
}
shw_warn () {
echo $(tput bold)$(tput setaf 2) $@ $(tput sgr 0)
}
shw_err () {
echo $(tput bold)$(tput setaf 1) $@ $(tput sgr 0)
}
आप फ़ंक्शन का उपयोग करके ऊपर कॉल कर सकते हैं shw_err "WARNING:: Error bla bla"
का उपयोग करते हुए printf
print red; echo -e "\e[31mfoo\e[m"
echo -e
नहीं है printf
, और यह भी एक चेतावनी की जरूरत है कि यह tput
विकल्प से अलग है कि यह स्वचालित रूप से सूट के लिए अनुकूल नहीं है $TERM
।
Zsh में :
autoload -U colors
colors
echo $fg[green]YES$fg[default] or $fg[red]NO$fg[default]?
print -P '%F{red}blah%f'
सरल आम उपयोगों के लिए (केवल एक रंग में पाठ की पूरी पंक्ति, अनुगामी न्यूलाइन के साथ) मैंने जस्वोनरीयन के कोड को संशोधित किया है:
#!/bin/bash
red='\e[1;31m%s\e[0m\n'
green='\e[1;32m%s\e[0m\n'
yellow='\e[1;33m%s\e[0m\n'
blue='\e[1;34m%s\e[0m\n'
magenta='\e[1;35m%s\e[0m\n'
cyan='\e[1;36m%s\e[0m\n'
printf "$green" "This is a test in green"
printf "$red" "This is a test in red"
printf "$yellow" "This is a test in yellow"
printf "$blue" "This is a test in blue"
printf "$magenta" "This is a test in magenta"
printf "$cyan" "This is a test in cyan"
awk -v red="$(printf '\e[1;31m%%s\e[0m\\n')" -v green="$(printf '\e[1;32m%%s\e[0m\\n')" 'BEGIN { printf red, "This text is in red"; printf green, "This text is in green" }'
बेहतर उपयोग करने के लिए है tput
जो आउटपुट / टर्मिनल क्षमताओं के आधार पर भागने वाले पात्रों को संभालेंगे। (यदि कोई टर्मिनल \e[*
रंग कोड की व्याख्या नहीं कर सकता है , तो यह "प्रदूषित" होगा जो आउटपुट को पढ़ने के लिए कठिन बना देता है। (या कभी-कभी, यदि आप grep
ऐसे आउटपुट करते हैं, तो आप उन \e[*
परिणामों को देखेंगे )
इस ट्यूटोरियल कोtput
देखें ।
तुम लिख सकते हो :
blue=$( tput setaf 4 ) ;
normal=$( tput sgr0 ) ;
echo "hello ${blue}blue world${normal}" ;
यहां टर्मिनल में रंगीन घड़ी प्रिंट करने के लिए एक ट्यूटोरियल है।
इसके अलावा, ध्यान दें कि tput
फ़ाइल से STDOUT को रीडायरेक्ट करने पर अभी भी वर्ण से बच सकता है:
$ myColoredScript.sh > output.log ;
# Problem: output.log will contain things like "^[(B^[[m"
ऐसा होने से रोकने के लिए, इस समाधानtput
में प्रस्तावित अपने चरों को सेटअप करें ।