simple bash script para checar se o túnel existe [pegando stdout e stderr]

1

Estou tentando escrever um script simples para um cronjob para verificar se algumas interfaces (túneis) estão existindo. se não, gostaria de começar outro script que (re) os inicie. meu problema é: eu não entendo o "IF" funcionando:

#bin/bash

for i in tun1 tun2 tun3 tun3 tun4 tun5
  do OUT="$(ip a show $i up)";

    if [[ $OUT == *"does not exist."* ]]; then
      echo "$i is down"
    else
      echo "$i is up"    
    fi

done

a saída atual é:

./check_tunnel.sh

tun1 is up

tun2 is up

tun3 is up

tun3 is up

tun4 is up

Device "tun5" does not exist.

tun5 is up

    
por Kjellson 26.09.2017 / 10:00

1 resposta

5

Device "tun5" does not exist. é impresso em stderr (erro padrão).
Seu script captura somente stdout (saída padrão).

Você pode redirecionar o stderr para o stdout para corrigir o problema (trailing 2>&1 ).

OUT="$(ip a show $i up 2>&1)"
    
por 26.09.2017 / 10:19