다음 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
옵션 set -x를 사용하여 디버그 모드에서 스크립트를 실행하지 않으면 두 번째 apt-get 명령에서 스크립트가 실패합니다. apt-get이 0을 반환하고($? 값을 확인함) 오류를 반환하더라도 "|| true"가 표시되기 때문에 스크립트가 충돌하는 이유를 이해할 수 없습니다.
이상한 점은 디버그 모드에서 스크립트를 실행하면 모든 것이 잘 작동한다는 것입니다. 내가 무엇을 놓치고 있나요? apt-get 버그인가요 아니면 스크립트에 있는 내용인가요?
답변1
알고 보니 제가 엉뚱한 곳을 찾고 있었던 것 같습니다. 스크립트가 실패합니다.
DEFAUT_BRIDGE=$(brctl show | grep "lxcbr0")
브리지 "lxcbr0"이 종료되지 않으면 grep은 오류와 함께 실패하고 스크립트를 중지합니다. 이 줄을 수정했습니다
DEFAUT_BRIDGE=$(brctl show | grep "lxcbr0" || true)
이제 모든 것이 잘 작동합니다.