Ruby や Javascript などの言語には、「赤」などの色名を使用してターミナル スクリプトを簡単に色付けできるライブラリがあることは知っています。
しかし、Bash や Ksh などのシェル スクリプトにはこのようなものがあるのでしょうか?
答え1
次のように bash スクリプトで色を定義できます。
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}."
答え2
またはtput
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"
答え3
autoload -U colors
colors
echo $fg[green]YES$fg[default] or $fg[red]NO$fg[default]?
答え4
出力/端末の機能に応じてエスケープ文字を処理する を使用する方がよいでしょう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
変数を次のように設定します。この解決策。