我有以下 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)
现在一切正常了。