fix: input hangs in subshell, broken menu border
This commit is contained in:
@@ -317,42 +317,47 @@ parse_active_rules() {
|
||||
|
||||
# ── Интерактивные функции ───────────────────────────────────────────────────────
|
||||
|
||||
REPLY_VALUE=""
|
||||
|
||||
input_ip() {
|
||||
REPLY_VALUE=""
|
||||
local ip
|
||||
while true; do
|
||||
echo -ne " IP адрес назначения: "
|
||||
read -r ip
|
||||
echo -ne " IP адрес назначения: " >/dev/tty
|
||||
read -r ip </dev/tty
|
||||
if validate_ip "$ip"; then
|
||||
echo "$ip"
|
||||
REPLY_VALUE="$ip"
|
||||
return
|
||||
fi
|
||||
msg_err "Некорректный IP. Поддерживаются IPv4 и IPv6."
|
||||
msg_err "Некорректный IP. Поддерживаются IPv4 и IPv6." >/dev/tty
|
||||
done
|
||||
}
|
||||
|
||||
input_port() {
|
||||
REPLY_VALUE=""
|
||||
local label="$1" port
|
||||
while true; do
|
||||
echo -ne " $label: "
|
||||
read -r port
|
||||
echo -ne " $label: " >/dev/tty
|
||||
read -r port </dev/tty
|
||||
if validate_port "$port"; then
|
||||
echo "$port"
|
||||
REPLY_VALUE="$port"
|
||||
return
|
||||
fi
|
||||
msg_err "Порт: число 1-65535."
|
||||
msg_err "Порт: число 1-65535." >/dev/tty
|
||||
done
|
||||
}
|
||||
|
||||
input_port_or_range() {
|
||||
REPLY_VALUE=""
|
||||
local label="$1" val
|
||||
while true; do
|
||||
echo -ne " $label (число или диапазон N:M): "
|
||||
read -r val
|
||||
echo -ne " $label (число или диапазон N:M): " >/dev/tty
|
||||
read -r val </dev/tty
|
||||
if validate_port_range "$val"; then
|
||||
echo "$val"
|
||||
REPLY_VALUE="$val"
|
||||
return
|
||||
fi
|
||||
msg_err "Формат: одиночный порт (1-65535) или диапазон (start:end)."
|
||||
msg_err "Формат: одиночный порт (1-65535) или диапазон (start:end)." >/dev/tty
|
||||
done
|
||||
}
|
||||
|
||||
@@ -363,11 +368,11 @@ menu_standard_rule() {
|
||||
|
||||
echo -e "\n${CYAN}── Настройка $label ($proto) ──${NC}\n"
|
||||
|
||||
local target_ip
|
||||
target_ip=$(input_ip)
|
||||
input_ip
|
||||
local target_ip="$REPLY_VALUE"
|
||||
|
||||
local port
|
||||
port=$(input_port "Порт (одинаковый вход/выход)")
|
||||
input_port "Порт (одинаковый вход/выход)"
|
||||
local port="$REPLY_VALUE"
|
||||
|
||||
echo ""
|
||||
apply_rules "$proto" "$port" "$port" "$target_ip" "$label"
|
||||
@@ -385,12 +390,14 @@ menu_custom_rule() {
|
||||
msg_err "Введите tcp или udp."
|
||||
done
|
||||
|
||||
local target_ip
|
||||
target_ip=$(input_ip)
|
||||
input_ip
|
||||
local target_ip="$REPLY_VALUE"
|
||||
|
||||
local in_port out_port
|
||||
in_port=$(input_port "Входящий порт (на этом сервере)")
|
||||
out_port=$(input_port "Исходящий порт (на целевом сервере)")
|
||||
input_port "Входящий порт (на этом сервере)"
|
||||
local in_port="$REPLY_VALUE"
|
||||
|
||||
input_port "Исходящий порт (на целевом сервере)"
|
||||
local out_port="$REPLY_VALUE"
|
||||
|
||||
echo ""
|
||||
apply_rules "$proto" "$in_port" "$out_port" "$target_ip" "Custom"
|
||||
@@ -408,11 +415,11 @@ menu_batch_rule() {
|
||||
msg_err "Введите tcp или udp."
|
||||
done
|
||||
|
||||
local target_ip
|
||||
target_ip=$(input_ip)
|
||||
input_ip
|
||||
local target_ip="$REPLY_VALUE"
|
||||
|
||||
local port_range
|
||||
port_range=$(input_port_or_range "Диапазон портов")
|
||||
input_port_or_range "Диапазон портов"
|
||||
local port_range="$REPLY_VALUE"
|
||||
|
||||
echo ""
|
||||
if [[ "$port_range" =~ ^([0-9]+):([0-9]+)$ ]]; then
|
||||
@@ -791,9 +798,9 @@ show_menu() {
|
||||
while true; do
|
||||
clear
|
||||
echo ""
|
||||
echo -e "${CYAN} ┌──────────────────────────────────────────────┐${NC}"
|
||||
echo -e "${CYAN} │${NC} ${WHITE}CASCAD${NC} ${DIM}v${VERSION}${NC} — каскадное NAT-перенаправление ${CYAN}│${NC}"
|
||||
echo -e "${CYAN} └──────────────────────────────────────────────┘${NC}"
|
||||
echo -e "${CYAN} ──────────────────────────────────────────${NC}"
|
||||
echo -e " ${WHITE}CASCAD${NC} ${DIM}v${VERSION}${NC} — каскадное NAT-перенаправление"
|
||||
echo -e "${CYAN} ──────────────────────────────────────────${NC}"
|
||||
echo ""
|
||||
echo -e " ${WHITE}Настройка правил:${NC}"
|
||||
echo -e " ${GREEN}1${NC}) AmneziaWG / WireGuard ${DIM}(UDP)${NC}"
|
||||
|
||||
Reference in New Issue
Block a user