カラー出力 - Bash

カラー出力 - Bash

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

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

答え1

私が提案した@finefootのおかげで、このコードはうまくいくようです。

#!/bin/bash

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
exec "$@"

使用法

それが呼び出されると仮定しset-color、それを呼び出すために使用しますset-color red hostname

説明する

  • Jasonwryanの答えによると、ケースブロックは色を定義します。ここ
  • このスクリプトはこの色を設定するために使用されますprintf
  • shiftスクリプトに入力された最初のオプション(色など)を削除します。
  • exec "$@"次に、残りのスクリプトを実行します。

答え2

すでにこれを行うことができるプログラムがあります。たとえば、grc次は1つです。

ログファイル、コマンド出力、任意のテキストの色を指定するために使用できる汎用シェーダ。正規表現で設定できます。

ここに画像の説明を入力してください。

[私は通常テキスト画像を使用するのが好きではありませんが、StackExchangeにカラーフォーマットオプションがないようです。]

またはあるsource-highlight

バラよりコマンド出力を取得し、事前定義されたスキームに従って色を付けることができるシェーダユーティリティはありますか?スーパーユーザーも利用可能

答え3

tput setaf 1; hostname; tput sgr0

tput端末データベースの対応する機能を照会します。setafここはANSIカラー1設定(赤)sgr0レンダリングするグラフィックを選択しない基本プロパティを返します。他にも(オリジナルペア)を使用して背景色と前景色のみをリセットし、他のグラフィックプロパティ(太字、下線、ハイライト、反転...)はそのままにすることがtput sgr0できます。tput op

zshtcshまたはなどの一部のシェルには、データベースfishクエリまたはカラー名をANSIコードにマッピングする機能が組み込まれています。zshfish)、しかしbash

では、zshプロンプト拡張を使用して次のホスト名を印刷しますred

print -P '%F{red}%m%f'

%f前景色のみリセット)

tcsh組み込み機能や組み込み機能zshを持つterminfoのechotc代わりにtermcapコードを使用してください。

echotc AF 1; hostname; echotc me

(最新バージョンのようなterminfoコードsetab / sgr0の場合zshechotitput

では、パラメータ拡張フラグzsh%パラメータ拡張時にプロンプ​​ト拡張をオンにするため、次のことができます。

red=%F{red} normal=%f

echo ${(%)red}whatever%{(%)normal}

アシスタントがコンテンツをカラーで作成するように実行できる自動読み込み可能機能zshもあります。colors

autoload colors; colors

echo $fg[red]whatever$fg[default]

関連情報