Bash 脚本仅在调试模式下运行

Bash 脚本仅在调试模式下运行

我有以下 bash 脚本:

#!/bin/bash -e

SUDO=sudo

$SUDO apt-get -y update || true
$SUDO apt-get -y install lxc bridge-utils || true

# remove the default bridge, if it exists
DEFAUT_BRIDGE=$(brctl show | grep "lxcbr0")
if ! [ -z "${DEFAULT_BRIDGE}" ]
then
      $SUDO ip link set dev lxcbr0 down
      $SUDO ip link del dev lxcbr0
fi

# add the WiFi and Mobile bridges, if they don't exist yet
WIFI_BRIDGE=$(brctl show | grep "lxcbr_wifi")
MOBILE_BRIDGE=$(brctl show | grep "lxcbr_wifi")

echo "${MOBILE_BRIDGE}"
echo "${WIFI_BRIDGE}"
if [ -z "${WIFI_BRIDGE}" ]
then
      echo "adding wifi bridge"
      $SUDO brctl addbr lxcbr_wifi
      $SUDO brctl addif lxcbr_wifi $(./network identify wifi)
      $SUDO ip link set dev lxcbr_wifi up
fi

if [ -z "${MOBILE_BRIDGE}" ]
then
    echo "adding mobile bridge"
    $SUDO brctl addbr lxcbr_mobile
    $SUDO brctl addif lxcbr_mobile $(./network identify mobile)
    $SUDO ip link set dev lxcbr_mobile up
 fi

该脚本在第二个 apt-get 命令处失败,除非我使用选项集 -x 在调试模式下运行该脚本。我无法理解为什么脚本在那里崩溃,因为 apt-get 返回 0 (我检查了 $? 的值),即使它返回错误,我也有“|| true”。

奇怪的是,如果我在调试模式下运行脚本,一切都会正常。我缺少什么?是 apt-get 错误还是脚本中的某些内容?

答案1

事实证明我找错了地方。该脚本失败于

    DEFAUT_BRIDGE=$(brctl show | grep "lxcbr0")

如果网桥“lxcbr0”不退出,grep 将失败并出现错误并停止脚本。我修改了这一行

    DEFAUT_BRIDGE=$(brctl show | grep "lxcbr0" || true)

现在一切正常了。

相关内容