Files
offline-taiwan-dic/start.sh
2026-05-12 01:31:44 +00:00

91 lines
2.5 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 啟動字典 server背景常駐區網可用
PORT=8765
SERVE_DIR="$(cd "$(dirname "$0")" && pwd)"
LOG_FILE="/tmp/dict-server-${PORT}.log"
PID_FILE="/tmp/dict-server-${PORT}.pid"
# 顏色
BOLD='\033[1m'
DIM='\033[2m'
GREEN='\033[32m'
YELLOW='\033[33m'
CYAN='\033[36m'
RESET='\033[0m'
# 取得區網 IP過濾掉 127.x、docker、virbr 等虛擬介面)
get_lan_ip() {
ip -4 addr show scope global 2>/dev/null \
| grep -oP '(?<=inet\s)\d+(\.\d+){3}' \
| grep -v '^127\.' \
| grep -v '^172\.1[7-9]\.' \
| grep -v '^172\.2[0-9]\.' \
| grep -v '^172\.3[0-1]\.' \
| head -n1
}
# 印出可點連結OSC 8
print_link() {
local url="$1"
local label="${2:-$url}"
printf '\033]8;;%s\033\\%s\033]8;;\033\\' "$url" "$label"
}
# 檢查是否已經在跑
if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
OLD_PID=$(cat "$PID_FILE")
echo -e "${YELLOW}⚠ server 已經在跑了${RESET}PID: $OLD_PID"
echo
else
# 檢查 port 有沒有被別人佔用
if ss -tln 2>/dev/null | grep -q ":${PORT} " || \
netstat -tln 2>/dev/null | grep -q ":${PORT} "; then
echo -e "${YELLOW}⚠ port ${PORT} 已被佔用,但不是這個 script 啟動的${RESET}"
echo " 先處理掉再執行,例如:"
echo " ${DIM}lsof -i :${PORT}${RESET}"
exit 1
fi
# 啟動
cd "$SERVE_DIR" || exit 1
nohup python3 -m http.server "$PORT" --bind 0.0.0.0 \
> "$LOG_FILE" 2>&1 &
echo $! > "$PID_FILE"
# 等一下確認真的起來了
sleep 0.3
if ! kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
echo -e "${YELLOW}✗ 啟動失敗,看 log${RESET} $LOG_FILE"
rm -f "$PID_FILE"
exit 1
fi
echo -e "${GREEN}✓ server 已啟動${RESET}PID: $(cat "$PID_FILE")"
echo
fi
# 顯示資訊
LAN_IP=$(get_lan_ip)
LOCAL_URL="http://localhost:${PORT}/"
echo -e "${BOLD}服務目錄${RESET} ${DIM}${SERVE_DIR}${RESET}"
echo -e "${BOLD}log${RESET} ${DIM}${LOG_FILE}${RESET}"
echo
echo -e "${BOLD}網址${RESET}"
printf ' 本機 '
print_link "$LOCAL_URL"
printf '\n'
if [ -n "$LAN_IP" ]; then
LAN_URL="http://${LAN_IP}:${PORT}/"
printf ' 區網 '
print_link "$LAN_URL"
printf '\n'
else
echo -e " ${DIM}(找不到區網 IP${RESET}"
fi
echo
echo -e "${DIM}停止:${RESET} kill \$(cat $PID_FILE) ${DIM}${RESET} pkill -f \"http.server ${PORT}\""