パイプカールカラー出力

パイプカールカラー出力

スクリプトの色です

#!/bin/bash 

ESC_SEQ="\x1b["
COL_RESET=$ESC_SEQ"39;49;00m"
  case $1 in
    red )    COL_START=$ESC_SEQ"31;01m"
  ;;
    green)   COL_START=$ESC_SEQ"32;01m"
  ;;
    yellow ) COL_START=$ESC_SEQ"33;01m"
  ;;
    blue )   COL_START=$ESC_SEQ"34;01m"
  ;;
    mage )   COL_START=$ESC_SEQ"35;01m"
  ;;
    cyan )   COL_START=$ESC_SEQ"36;01m"
  ;;
  esac

  echo -ne $COL_START
  while read text;
  do
  echo  $text
  done
  echo -ne $COL_RESET

私がするとき

curl localhost:8080/

通常のカール出力HOOOOORAYで応答します!

私がするとき

curl localhost:8080/ | color red

期待どおりに出力色が指定されていません... "CRY"

私はこの状況を正しく呼ぶのではないと思います。

ベストアンサー1

あなたの質問に尋ねたように正確に動作します。脱出が正しいことを確認する必要があるかもしれません。 $ TERMの正しいエスケープではない可能性があります。これは、次のようにtputを使用して正しいエスケープを照会することで簡単に修正できます。

COL_RESET=$(tput sgr0)
...
red )    COL_START=$(tput setaf 1)
green )    COL_START=$(tput setaf 2)
blue )    COL_START=$(tput setaf 4)
...

これを使った別の例ここで見つけることができます

干渉を防ぐためにエコーを呼び出す方法を変更することもできます。 echoのマニュアルページでは、以下を提案します。

Due to shell aliases and built-in `echo' command, using an unadorned `echo' 
interactively or in a script may get you different functionality than that
described here.  Invoke it via `env' (i.e., `env echo ...') to avoid
interference from the shell.

おすすめ記事