b 2 日 前
コミット
6b890140f3
1 ファイル変更52 行追加30 行削除
  1. 52 30
      tool-moyu.sh

+ 52 - 30
tool-moyu.sh

@@ -21,8 +21,8 @@
 
 set -euo pipefail
 
-LOOP_TIMES=0          # 0 = 无限
-DELAY_MS=0            # 0 = 随机 80-400
+LOOP_TIMES=0 # 0 = 无限
+DELAY_MS=0   # 0 = 随机 80-400
 TYPE_EFFECT=0
 SILENT=0
 
@@ -33,13 +33,28 @@ show_usage() {
 
 while [ $# -gt 0 ]; do
 	case "$1" in
-		-n) LOOP_TIMES="${2:?}"; shift 2 ;;
-		-d) DELAY_MS="${2:?}"; shift 2 ;;
-		-t) TYPE_EFFECT=1; shift ;;
-		-s) SILENT=1; shift ;;
-		--help|-h) show_usage ;;
-		-*) echo "Unknown option: $1" >&2; exit 1 ;;
-		*) break ;;
+	-n)
+		LOOP_TIMES="${2:?}"
+		shift 2
+		;;
+	-d)
+		DELAY_MS="${2:?}"
+		shift 2
+		;;
+	-t)
+		TYPE_EFFECT=1
+		shift
+		;;
+	-s)
+		SILENT=1
+		shift
+		;;
+	--help | -h) show_usage ;;
+	-*)
+		echo "Unknown option: $1" >&2
+		exit 1
+		;;
+	*) break ;;
 	esac
 done
 
@@ -103,7 +118,7 @@ OUTPUTS=(
 	"Active: active (running)"
 	"[GIN-debug] Listening and serving HTTP on :8081"
 	"warn: chunk size exceeds 4000 kB"
-	"ERROR: failed to open source \"file://internal/migrations\""
+	'ERROR: failed to open source "file://internal/migrations"'
 	"FATAL: database connection refused, retrying..."
 	"0 error(s), 5 warning(s)"
 	"migrations completed successfully"
@@ -114,15 +129,15 @@ OUTPUTS=(
 
 # 动态随机数字行(消除固定值反复出现)
 gen_rand_lines() {
-	local n=$((1 + RANDOM % 3))   # 1-3 条
+	local n=$((1 + RANDOM % 3)) # 1-3 条
 	local i r
-	for ((i=0;i<n;i++)); do
+	for ((i = 0; i < n; i++)); do
 		r=$((RANDOM % 4))
 		case $r in
-			0) echo "ok  $(awk 'BEGIN{srand(); printf "%.3f", 0.05+rand()*1.5}')s" ;;
-			1) echo "dist/assets/index-*.js  $(awk 'BEGIN{srand(); printf "%.2f", 8+rand()*300}') kB │ gzip: $(awk 'BEGIN{srand(); printf "%.2f", 3+rand()*80}') kB" ;;
-			2) echo "Progress: $((5+RANDOM%95))%..." ;;
-			3) echo "$((1+RANDOM%40)) test(s), $((RANDOM%4)) failed" ;;
+		0) echo "ok  $(awk 'BEGIN{srand(); printf "%.3f", 0.05+rand()*1.5}')s" ;;
+		1) echo "dist/assets/index-*.js  $(awk 'BEGIN{srand(); printf "%.2f", 8+rand()*300}') kB │ gzip: $(awk 'BEGIN{srand(); printf "%.2f", 3+rand()*80}') kB" ;;
+		2) echo "Progress: $((5 + RANDOM % 95))%..." ;;
+		3) echo "$((1 + RANDOM % 40)) test(s), $((RANDOM % 4)) failed" ;;
 		esac
 	done
 }
@@ -131,45 +146,45 @@ gen_rand_lines() {
 pick_unique() {
 	local count=$1 pool=$2
 	[ "$pool" -lt "$count" ] && count=$pool
-	seq 0 $((pool-1)) | sort -R | head -n "$count"
+	seq 0 $((pool - 1)) | sort -R | head -n "$count"
 }
 
 # 随机生成一段“工作日志”:命令(约一半带输出)+独立行+裸输出+动态数字,洗牌打乱
 # 块大小不规则、数字随机化,消除固定模式与重复数字
 gen_random_content() {
-	local cmdc=$((1 + RANDOM % 5))   # 1-5 条命令
-	local stc=$((2 + RANDOM % 6))   # 2-7 条独立行
+	local cmdc=$((1 + RANDOM % 5)) # 1-5 条命令
+	local stc=$((2 + RANDOM % 6))  # 2-7 条独立行
 	local ci si oi i
 	LINES=()
 	# 命令:约一半紧跟输出(不一定成对,制造不规则块)
 	for ci in $(pick_unique "$cmdc" "${#COMMANDS[@]}"); do
 		LINES+=("\$ ${COMMANDS[$ci]}")
 		if [ $((RANDOM % 2)) -eq 0 ]; then LINES+=("${COMMAND_OUT[$ci]}"); fi
-		[ $((RANDOM % 4)) -eq 0 ] && LINES+=("")   # 随机空行
+		[ $((RANDOM % 4)) -eq 0 ] && LINES+=("") # 随机空行
 	done
 	# 独立行(不重复)
 	for si in $(pick_unique "$stc" "${#STANDALONE[@]}"); do
 		LINES+=("${STANDALONE[$si]}")
-		[ $((RANDOM % 3)) -eq 0 ] && LINES+=("")   # 随机空行
+		[ $((RANDOM % 3)) -eq 0 ] && LINES+=("") # 随机空行
 	done
 	# 裸输出行(可重复)
-	for ((i=0;i<$((2+RANDOM%4));i++)); do
+	for ((i = 0; i < $((2 + RANDOM % 4)); i++)); do
 		LINES+=("${OUTPUTS[$((RANDOM % ${#OUTPUTS[@]}))]}")
 	done
 	# 动态随机数字行
 	while IFS= read -r l; do LINES+=("$l"); done < <(gen_rand_lines)
 	# 洗牌打乱整体顺序
-	local idx=($(seq 0 $((${#LINES[@]}-1)) | sort -R))
+	local idx=($(seq 0 $((${#LINES[@]} - 1)) | sort -R))
 	local shuffled=()
 	for i in "${idx[@]}"; do shuffled+=("${LINES[$i]}"); done
 	LINES=("${shuffled[@]}")
 }
 
 # 内容来源:文件参数 > 随机生成
-CONTENT="${1:-}"
+CONTENT="${1-}"
 FILE_MODE=0
 if [ -n "$CONTENT" ] && [ -f "$CONTENT" ]; then
-	mapfile -t LINES < "$CONTENT"
+	mapfile -t LINES <"$CONTENT"
 	FILE_MODE=1
 elif [ -n "$CONTENT" ] && [ "$CONTENT" != "-" ]; then
 	echo "File not found: $CONTENT, falling back to random content." >&2
@@ -177,11 +192,15 @@ elif [ -n "$CONTENT" ] && [ "$CONTENT" != "-" ]; then
 else
 	gen_random_content
 fi
-[ "${#LINES[@]}" -eq 0 ] && { echo "Content empty, nothing to slack on." >&2; exit 1; }
+[ "${#LINES[@]}" -eq 0 ] && {
+	echo "Content empty, nothing to slack on." >&2
+	exit 1
+}
 
 # 随机延时
 rand_delay() {
-	if [ "$DELAY_MS" -gt 0 ]; then sleep "$(awk -v d="$DELAY_MS" 'BEGIN{printf "%.3f", d/1000}')";
+	if [ "$DELAY_MS" -gt 0 ]; then
+		sleep "$(awk -v d="$DELAY_MS" 'BEGIN{printf "%.3f", d/1000}')"
 	else sleep "$(awk -v lo=80 -v hi=400 'BEGIN{srand(); printf "%.3f", (lo+int(rand()*(hi-lo+1)))/1000}')"; fi
 }
 
@@ -190,19 +209,22 @@ run_once() {
 	for line in "${LINES[@]}"; do
 		if [ "$TYPE_EFFECT" = "1" ]; then
 			local i
-			for ((i=0; i<${#line}; i++)); do printf "%s" "${line:i:1}"; rand_delay; done
+			for ((i = 0; i < ${#line}; i++)); do
+				printf "%s" "${line:i:1}"
+				rand_delay
+			done
 			echo ""
 		else
 			echo "$line"
 		fi
 		rand_delay
 	done
-	echo ""   # 每遍之间空行
+	echo "" # 每遍之间空行
 }
 
 n=0
 while [ "$LOOP_TIMES" -eq 0 ] || [ "$n" -lt "$LOOP_TIMES" ]; do
-	n=$((n+1))
+	n=$((n + 1))
 	# 每轮重新生成随机内容(避免内容固定导致反复重复);文件模式则用固定内容
 	[ "$FILE_MODE" = "0" ] && gen_random_content
 	run_once