63 lines
2.1 KiB
Bash
63 lines
2.1 KiB
Bash
#!/bin/bash
|
|
# ttyd 会话入口:根据 URL 参数或用户选择分配 tmux session
|
|
|
|
SESSION_NAME=""
|
|
|
|
# ttyd 会将 query string 存入 TTYD_QUERY_STRING 环境变量
|
|
if [ -n "$TTYD_QUERY_STRING" ]; then
|
|
# 解析 session 参数
|
|
SESSION_NAME=$(echo "$TTYD_QUERY_STRING" | tr '&' '\n' | grep '^session=' | head -1 | cut -d= -f2)
|
|
fi
|
|
|
|
if [ -z "$SESSION_NAME" ]; then
|
|
# 没有指定 session,显示选择菜单
|
|
echo ""
|
|
echo "╔══════════════════════════════════════╗"
|
|
echo "║ 选择或创建 tmux session ║"
|
|
echo "╠══════════════════════════════════════╣"
|
|
|
|
# 列出已有 session
|
|
EXISTING=$(tmux list-sessions 2>/dev/null | awk '{print $1}')
|
|
if [ -n "$EXISTING" ]; then
|
|
echo "║ 已有 session: ║"
|
|
I=1
|
|
for s in $EXISTING; do
|
|
printf "║ [%d] %-33s║\n" "$I" "$s"
|
|
I=$((I + 1))
|
|
done
|
|
else
|
|
echo "║ (无已有 session) ║"
|
|
fi
|
|
|
|
echo "╠══════════════════════════════════════╣"
|
|
echo "║ 输入编号选择,或输入新名称创建 ║"
|
|
echo "╚══════════════════════════════════════╝"
|
|
echo ""
|
|
|
|
read -p "session: " CHOICE
|
|
|
|
if [ -z "$CHOICE" ]; then
|
|
CHOICE="default"
|
|
fi
|
|
|
|
# 判断是数字编号还是名称
|
|
if echo "$CHOICE" | grep -qE '^[0-9]+$' && [ -n "$EXISTING" ]; then
|
|
SESSION_NAME=$(echo "$EXISTING" | sed -n "${CHOICE}p")
|
|
else
|
|
SESSION_NAME="$CHOICE"
|
|
fi
|
|
|
|
# 清屏
|
|
clear
|
|
fi
|
|
|
|
# session 名只保留字母数字下划线连字符
|
|
SESSION_NAME=$(echo "$SESSION_NAME" | tr -cd 'a-zA-Z0-9_\-')
|
|
|
|
# 如果 session 已存在,共享 attach;否则新建
|
|
if tmux has-session -t "$SESSION_NAME" 2>/dev/null; then
|
|
exec tmux attach-session -t "$SESSION_NAME"
|
|
else
|
|
exec tmux new-session -s "$SESSION_NAME"
|
|
fi
|