|
|
@@ -17,6 +17,7 @@
|
|
|
# -d MS 每行间隔毫秒(默认随机 80-400)
|
|
|
# -t 逐个字符「打字」效果
|
|
|
# -s 静默模式:不打印假状态行,只循环内容
|
|
|
+# -c PCT 命中行的实际上色概率(0-100, 默认 35)
|
|
|
# =============================================================
|
|
|
|
|
|
set -euo pipefail
|
|
|
@@ -25,9 +26,10 @@ LOOP_TIMES=0 # 0 = 无限
|
|
|
DELAY_MS=0 # 0 = 随机 80-400
|
|
|
TYPE_EFFECT=0
|
|
|
SILENT=0
|
|
|
+COLOR_RATIO=35 # 0-100, 命中语义的行的实际上色概率(降彩色密度)
|
|
|
|
|
|
show_usage() {
|
|
|
- sed -n '1,20p' "$0"
|
|
|
+ sed -n '1,24p' "$0"
|
|
|
exit 0
|
|
|
}
|
|
|
|
|
|
@@ -49,6 +51,16 @@ while [ $# -gt 0 ]; do
|
|
|
SILENT=1
|
|
|
shift
|
|
|
;;
|
|
|
+ -c | --color-ratio)
|
|
|
+ COLOR_RATIO="${2:?}"
|
|
|
+ case "$COLOR_RATIO" in *[!0-9]*)
|
|
|
+ echo "Invalid color ratio: $COLOR_RATIO (expect 0-100)" >&2
|
|
|
+ exit 1
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+ [ "$COLOR_RATIO" -gt 100 ] && { echo "color ratio must be 0-100" >&2; exit 1; }
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
--help | -h) show_usage ;;
|
|
|
-*)
|
|
|
echo "Unknown option: $1" >&2
|
|
|
@@ -365,14 +377,24 @@ rand_delay() {
|
|
|
# 按内容语义配色(优先级:命令 > 致命 > 错误 > 警告 > 成功 > 默认)
|
|
|
# 命令=青 / FATAL=红加粗 / 错误=红 / 警告=黄 / 成功=绿;仅随机生成模式调用
|
|
|
colorize() {
|
|
|
- case "$1" in
|
|
|
- '$ '*) printf '\033[1;36m%s\033[0m' "$1" ;;
|
|
|
- *[Ff][Aa][Tt][Aa][Ll]*) printf '\033[1;31m%s\033[0m' "$1" ;;
|
|
|
- *ERROR* | *ERR:* | *\[err\]* | *err:*) printf '\033[31m%s\033[0m' "$1" ;;
|
|
|
- *warn* | *WARN*) 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" ;;
|
|
|
+ local line="$1" code=""
|
|
|
+ case "$line" in
|
|
|
+ '$ '*) code='\033[1;36m' ;;
|
|
|
+ *[Ff][Aa][Tt][Aa][Ll]*) code='\033[1;31m' ;;
|
|
|
+ *ERROR* | *ERR:* | *\[err\]* | *err:*) code='\033[31m' ;;
|
|
|
+ *warn* | *WARN*) code='\033[33m' ;;
|
|
|
+ *'✓'* | *PASS* | *'ok '* | *'HTTP 200'* | *PONG* | *'no type errors'* | *'completed successfully'* | *'Build succeeded'*) code='\033[32m' ;;
|
|
|
esac
|
|
|
+ if [ -n "$code" ]; then
|
|
|
+ # 概率门控: 仅约 COLOR_RATIO% 的命中行真正上彩(降彩色密度); 100=全彩 0=全无色
|
|
|
+ if [ "$COLOR_RATIO" -ge 100 ] || [ $((RANDOM % 100)) -lt "$COLOR_RATIO" ]; then
|
|
|
+ printf '%s%s\033[0m' "$code" "$line"
|
|
|
+ else
|
|
|
+ printf '%s' "$line"
|
|
|
+ fi
|
|
|
+ else
|
|
|
+ printf '%s' "$line"
|
|
|
+ fi
|
|
|
}
|
|
|
|
|
|
run_once() {
|