私はいくつかの答えを見ましたが、それらはすべてecho
について話します。 bashでコマンドの出力の色を変更するにはどうすればよいですか?たとえば、hostname
コマンドの出力を色分けしたいとします。
$ hostname
Nameofcomputer <--- Just the output to be colored and then it returns to default color of the Shell.
grc
のように、すでにこれを実行するプログラムがあります。
汎用のカラーライザー。ログファイル、コマンドの出力、任意のテキストなどの色付けに使用できます。regexpで設定します。
[私は通常、テキストの画像を使いたくありませんが、StackExchangeに色のオプションがあるとは思いません]
または source-highlight
。
参照 コマンド出力を取得し、事前定義されたスキームに応じてそれを色付けできるカラーライザーユーティリティはありますか? SuperUserも
これは一般的に機能する部分的な回答ですが、特殊文字が詰まっています。
#!/bin/sh
case $1 in
red) col=$'\e[1;31m' ;;
green) col=$'\e[1;32m' ;;
yellow) col=$'\e[1;33m' ;;
blue) col=$'\e[1;34m' ;;
Magenta) col=$'\e[1;35m' ;;
cyan) col=$'\e[1;36m' ;;
esac
printf "%s" "${col}"
shift
eval $@
set-color
、単にset-color red hostname
。
printf
でこの色を設定します。shift
は、スクリプトに与えられた最初のオプション(つまり、色)を削除します。eval $@
次に、残りのスクリプトを実行します。問題は、スクリプトがエスケープと引用符を使い果たすことです。例えば通常実行した場合。
grep "foo bar" file\ name
次に、使用する必要があります
set-color red grep \"foo bar\" file\\ name
tput setaf 1; hostname; tput sgr0
tput
は、対応する機能について端末データベースを照会します。ここでsetaf
forset ANSI color 1(red)、sgr0
toselectグラフィックレンディションnoneでデフォルトの属性に戻ります。 tput sgr0
の代わりに、tput op
(元のペア)を使用して、背景と前景色のみをリセットし、他のグラフィック属性(太字、下線、目立つ、反転など)をそのままにすることもできます。
zsh
、tcsh
、fish
などの一部のシェルには、そのデータベースを照会したり、色名をANSIコード(zsh
や など)にマップするための組み込みサポートがあります。 fish
)、ただしbash
ではありません。
zsh
では、プロンプト拡張を使用してホスト名をred
に出力します。
print -P '%F{red}%m%f'
(%f
は前景色のみをリセットします)
tcsh
またはzsh
を組み込み、terminfoの代わりにtermcapコードを使用してechotc
を組み込みます。
echotc AF 1; hostname; echotc me
(zsh
には、echoti
の最新バージョンと同様に、terminfoコードsetab/sgr0用のtput
があります)。
zsh
では、%
パラメータ展開フラグにより、パラメータ展開時にプロンプト展開がオンになるため、次のことができます。
red=%F{red} normal=%f
echo ${(%)red}whatever%{(%)normal}
zsh
には、colors
自動ロード可能な関数もあり、ヘルパーに色で書くために実行できます。
autoload colors; colors
echo $fg[red]whatever$fg[default]