スクリプトの色です
#!/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.