这是脚本颜色
#!/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 的方式,以防受到干扰。 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.