web-dev-qa-db-ja.com

カラーで出力-Bash

私はいくつかの答えを見ましたが、それらはすべてechoについて話します。 bashでコマンドの出力の色を変更するにはどうすればよいですか?たとえば、hostnameコマンドの出力を色分けしたいとします。

$ hostname 
Nameofcomputer <--- Just the output to be colored and then it returns to default color of the Shell.
2
Fenomatik

grcのように、すでにこれを実行するプログラムがあります。

汎用のカラーライザー。ログファイル、コマンドの出力、任意のテキストなどの色付けに使用できます。regexpで設定します。

enter image description here

[私は通常、テキストの画像を使いたくありませんが、StackExchangeに色のオプションがあるとは思いません]

または source-highlight

参照 コマンド出力を取得し、事前定義されたスキームに応じてそれを色付けできるカラーライザーユーティリティはありますか? SuperUserも

2
Xen2050

これは一般的に機能する部分的な回答ですが、特殊文字が詰まっています。

#!/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

説明

  • ケースブロックは、jasonwryanの回答 here に従って色を定義します。
  • スクリプトはprintfでこの色を設定します。
  • shiftは、スクリプトに与えられた最初のオプション(つまり、色)を削除します。
  • eval $@次に、残りのスクリプトを実行します。

問題

問題は、スクリプトがエスケープと引用符を使い果たすことです。例えば通常実行した場合。

grep "foo bar" file\ name

次に、使用する必要があります

set-color red grep \"foo bar\" file\\ name
1
Sparhawk
tput setaf 1; hostname; tput sgr0

tputは、対応する機能について端末データベースを照会します。ここでsetaf forset ANSI color 1(red)、sgr0 toselectグラフィックレンディションnoneでデフォルトの属性に戻ります。 tput sgr0の代わりに、tput op(元のペア)を使用して、背景と前景色のみをリセットし、他のグラフィック属性(太字、下線、目立つ、反転など)をそのままにすることもできます。

zshtcshfishなどの一部のシェルには、そのデータベースを照会したり、色名を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]
1