O script Bash é executado apenas no modo de depuração [fechado]

1

Eu tenho o seguinte script:

#!/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

Este script falha no segundo comando apt-get, a menos que eu execute o script no modo de depuração, com a opção set -x. Eu não consigo entender porque o script está falhando lá, já que o apt-get retorna 0 (eu verifiquei o valor de $?) E mesmo que ele retorne um erro, eu tenho "|| true".

Mais estranho, se eu executar o script no modo de depuração, tudo funciona. O que eu estou sentindo falta? É o apt-get fault, ou algo no script?

    
por ngoncalves 10.07.2015 / 10:20

1 resposta

1

Acontece que eu estava procurando no lugar errado. O script estava falhando em

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

se a ponte de rede "lxcbr0" não sair, o grep falhará um erro e interrompe o script. Eu modifiquei esta linha para

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

e agora tudo funciona.

    
por 10.07.2015 / 10:27