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