fix: prevent silent exit during network detection (pipefail + grep)
The script uses 'set -eo pipefail' which causes grep to exit the script
silently when no matches are found (grep returns exit code 1).
Root cause: When a system only has loopback interface (lo), the command
grep -vE '^(lo|docker...)' returns exit 1 (no matches)
With pipefail, this causes the entire pipeline to fail, and with set -e,
the script exits silently without any error message.
Fix: Wrap grep commands in { grep ... || true; } to prevent pipeline
failures when grep finds no matches.
Affected functions:
- detect_network() in outer installer script
- detect_network() in embedded management script
- Network detection in settings menu
Fixes #25
This commit is contained in:
21
paqctl.sh
21
paqctl.sh
@@ -480,12 +480,14 @@ detect_network() {
|
|||||||
DETECTED_IFACE=$(ip route show default 2>/dev/null | awk '{print $5; exit}')
|
DETECTED_IFACE=$(ip route show default 2>/dev/null | awk '{print $5; exit}')
|
||||||
if [ -z "$DETECTED_IFACE" ]; then
|
if [ -z "$DETECTED_IFACE" ]; then
|
||||||
# Skip loopback, docker, veth, bridge, and other virtual interfaces
|
# Skip loopback, docker, veth, bridge, and other virtual interfaces
|
||||||
DETECTED_IFACE=$(ip -o link show 2>/dev/null | awk -F': ' '{gsub(/ /,"",$2); print $2}' | grep -vE '^(lo|docker[0-9]|br-|veth|virbr|tun|tap|wg)' | head -1)
|
# Note: grep -v returns exit 1 if no matches, so we add || true for pipefail
|
||||||
|
DETECTED_IFACE=$(ip -o link show 2>/dev/null | awk -F': ' '{gsub(/ /,"",$2); print $2}' | { grep -vE '^(lo|docker[0-9]|br-|veth|virbr|tun|tap|wg)' || true; } | head -1)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Local IP
|
# Local IP
|
||||||
if [ -n "$DETECTED_IFACE" ]; then
|
if [ -n "$DETECTED_IFACE" ]; then
|
||||||
DETECTED_IP=$(ip -4 addr show "$DETECTED_IFACE" 2>/dev/null | awk '/inet /{print $2}' | cut -d/ -f1 | grep -o '[0-9.]*' | head -1)
|
# Note: grep returns exit 1 if no matches, so we add || true for pipefail
|
||||||
|
DETECTED_IP=$(ip -4 addr show "$DETECTED_IFACE" 2>/dev/null | awk '/inet /{print $2}' | cut -d/ -f1 | { grep -o '[0-9.]*' || true; } | head -1)
|
||||||
fi
|
fi
|
||||||
if [ -z "$DETECTED_IP" ]; then
|
if [ -z "$DETECTED_IP" ]; then
|
||||||
DETECTED_IP=$(hostname -I 2>/dev/null | awk '{print $1}')
|
DETECTED_IP=$(hostname -I 2>/dev/null | awk '{print $1}')
|
||||||
@@ -508,7 +510,8 @@ detect_network() {
|
|||||||
fi
|
fi
|
||||||
if [ -z "$DETECTED_GW_MAC" ] && command -v arp &>/dev/null; then
|
if [ -z "$DETECTED_GW_MAC" ] && command -v arp &>/dev/null; then
|
||||||
# Fallback: parse arp output looking for MAC pattern
|
# Fallback: parse arp output looking for MAC pattern
|
||||||
DETECTED_GW_MAC=$(arp -n "$DETECTED_GATEWAY" 2>/dev/null | grep -oE '([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}' | head -1)
|
# Note: grep returns exit 1 if no matches, so we add || true for pipefail
|
||||||
|
DETECTED_GW_MAC=$(arp -n "$DETECTED_GATEWAY" 2>/dev/null | { grep -oE '([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}' || true; } | head -1)
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1941,12 +1944,14 @@ detect_network() {
|
|||||||
# Default interface
|
# Default interface
|
||||||
DETECTED_IFACE=$(ip route show default 2>/dev/null | awk '{print $5; exit}')
|
DETECTED_IFACE=$(ip route show default 2>/dev/null | awk '{print $5; exit}')
|
||||||
if [ -z "$DETECTED_IFACE" ]; then
|
if [ -z "$DETECTED_IFACE" ]; then
|
||||||
DETECTED_IFACE=$(ip -o link show 2>/dev/null | awk -F': ' '{gsub(/ /,"",$2); print $2}' | grep -vE '^(lo|docker[0-9]|br-|veth|virbr|tun|tap|wg)' | head -1)
|
# Note: grep -v returns exit 1 if no matches, so we add || true for pipefail
|
||||||
|
DETECTED_IFACE=$(ip -o link show 2>/dev/null | awk -F': ' '{gsub(/ /,"",$2); print $2}' | { grep -vE '^(lo|docker[0-9]|br-|veth|virbr|tun|tap|wg)' || true; } | head -1)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Local IP
|
# Local IP
|
||||||
if [ -n "$DETECTED_IFACE" ]; then
|
if [ -n "$DETECTED_IFACE" ]; then
|
||||||
DETECTED_IP=$(ip -4 addr show "$DETECTED_IFACE" 2>/dev/null | awk '/inet /{print $2}' | cut -d/ -f1 | grep -o '[0-9.]*' | head -1)
|
# Note: grep returns exit 1 if no matches, so we add || true for pipefail
|
||||||
|
DETECTED_IP=$(ip -4 addr show "$DETECTED_IFACE" 2>/dev/null | awk '/inet /{print $2}' | cut -d/ -f1 | { grep -o '[0-9.]*' || true; } | head -1)
|
||||||
fi
|
fi
|
||||||
if [ -z "$DETECTED_IP" ]; then
|
if [ -z "$DETECTED_IP" ]; then
|
||||||
DETECTED_IP=$(hostname -I 2>/dev/null | awk '{print $1}')
|
DETECTED_IP=$(hostname -I 2>/dev/null | awk '{print $1}')
|
||||||
@@ -1966,7 +1971,8 @@ detect_network() {
|
|||||||
DETECTED_GW_MAC=$(ip neigh show "$DETECTED_GATEWAY" 2>/dev/null | awk '/lladdr/{print $5; exit}')
|
DETECTED_GW_MAC=$(ip neigh show "$DETECTED_GATEWAY" 2>/dev/null | awk '/lladdr/{print $5; exit}')
|
||||||
fi
|
fi
|
||||||
if [ -z "$DETECTED_GW_MAC" ] && command -v arp &>/dev/null; then
|
if [ -z "$DETECTED_GW_MAC" ] && command -v arp &>/dev/null; then
|
||||||
DETECTED_GW_MAC=$(arp -n "$DETECTED_GATEWAY" 2>/dev/null | grep -oE '([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}' | head -1)
|
# Note: grep returns exit 1 if no matches, so we add || true for pipefail
|
||||||
|
DETECTED_GW_MAC=$(arp -n "$DETECTED_GATEWAY" 2>/dev/null | { grep -oE '([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}' || true; } | head -1)
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -4155,7 +4161,8 @@ change_config() {
|
|||||||
|
|
||||||
# Detect network
|
# Detect network
|
||||||
local _iface=$(ip route show default 2>/dev/null | awk '{print $5; exit}')
|
local _iface=$(ip route show default 2>/dev/null | awk '{print $5; exit}')
|
||||||
local _ip=$(ip -4 addr show "$_iface" 2>/dev/null | awk '/inet /{print $2}' | cut -d/ -f1 | grep -o '[0-9.]*' | head -1)
|
# Note: grep returns exit 1 if no matches, so we add || true for pipefail
|
||||||
|
local _ip=$(ip -4 addr show "$_iface" 2>/dev/null | awk '/inet /{print $2}' | cut -d/ -f1 | { grep -o '[0-9.]*' || true; } | head -1)
|
||||||
local _gw=$(ip route show default 2>/dev/null | awk '{print $3; exit}')
|
local _gw=$(ip route show default 2>/dev/null | awk '{print $3; exit}')
|
||||||
local _gw_mac=""
|
local _gw_mac=""
|
||||||
[ -n "$_gw" ] && _gw_mac=$(ip neigh show "$_gw" 2>/dev/null | awk '/lladdr/{print $5; exit}')
|
[ -n "$_gw" ] && _gw_mac=$(ip neigh show "$_gw" 2>/dev/null | awk '/lladdr/{print $5; exit}')
|
||||||
|
|||||||
Reference in New Issue
Block a user