|
|
@@ -58,6 +58,13 @@ while [ $# -gt 0 ]; do
|
|
|
esac
|
|
|
done
|
|
|
|
|
|
+# ---- 颜色自动检测:仅 TTY 或 FORCE_COLOR=1 才上色;NO_COLOR 显式禁用 ----
|
|
|
+# 文件模式不上色(见 run_once),此处仅决定随机内容是否套用 ANSI 主题色
|
|
|
+COLOR=0
|
|
|
+if [ -z "${NO_COLOR:-}" ] && { [ "${FORCE_COLOR:-0}" = "1" ] || [ -t 1 ]; }; then
|
|
|
+ COLOR=1
|
|
|
+fi
|
|
|
+
|
|
|
# ---- 命令与对应输出(成对,命令后紧跟其输出更真实) ----
|
|
|
COMMANDS=(
|
|
|
"go vet ./..."
|
|
|
@@ -242,18 +249,34 @@ rand_delay() {
|
|
|
else sleep "$(awk -v lo=80 -v hi=400 'BEGIN{srand(); printf "%.3f", (lo+int(rand()*(hi-lo+1)))/1000}')"; fi
|
|
|
}
|
|
|
|
|
|
+# 按内容语义配色(优先级:命令 > 致命 > 错误 > 警告 > 成功 > 默认)
|
|
|
+# 命令=青 / FATAL=红加粗 / 错误=红 / 警告=黄 / 成功=绿;仅随机生成模式调用
|
|
|
+colorize() {
|
|
|
+ case "$1" in
|
|
|
+ '$ '*) printf '\033[1;36m%s\033[0m' "$1" ;;
|
|
|
+ *FATAL*) printf '\033[1;31m%s\033[0m' "$1" ;;
|
|
|
+ *ERROR* | *\[err\]* | *err:*) printf '\033[31m%s\033[0m' "$1" ;;
|
|
|
+ *warn* | *WARNING*) printf '\033[33m%s\033[0m' "$1" ;;
|
|
|
+ *'✓'* | *PASS* | *'ok '* | *'HTTP 200'* | *PONG* | *'no type errors'* | *'completed successfully'* | *'Build succeeded'*) printf '\033[32m%s\033[0m' "$1" ;;
|
|
|
+ *) printf '%s' "$1" ;;
|
|
|
+ esac
|
|
|
+}
|
|
|
+
|
|
|
run_once() {
|
|
|
local line
|
|
|
for line in "${LINES[@]}"; do
|
|
|
+ local out="$line"
|
|
|
+ # 文件模式或终端不支持颜色 → 原样输出
|
|
|
+ if [ "$FILE_MODE" = "0" ] && [ "$COLOR" = "1" ]; then out=$(colorize "$line"); fi
|
|
|
if [ "$TYPE_EFFECT" = "1" ]; then
|
|
|
local i
|
|
|
- for ((i = 0; i < ${#line}; i++)); do
|
|
|
- printf "%s" "${line:i:1}"
|
|
|
+ for ((i = 0; i < ${#out}; i++)); do
|
|
|
+ printf "%s" "${out:i:1}"
|
|
|
rand_delay
|
|
|
done
|
|
|
echo ""
|
|
|
else
|
|
|
- echo "$line"
|
|
|
+ printf '%s\n' "$out"
|
|
|
fi
|
|
|
rand_delay
|
|
|
done
|