простой сценарий bash для проверки наличия туннеля существует [перехват stdout и stderr]

я пытаюсь написать простой bash-скрипт для cronjob, чтобы проверить, существуют ли какие-то интерфейсы (туннели). если нет, я бы хотел запустить другой скрипт, который (повторно) запускает их. моя проблема: у меня не работает "IF":

#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

текущий вывод:

./ check_tunnel.sh

tun1 is up

tun2 is up

tun3 is up

tun3 работает

tun4 работает

Устройство "tun5" не существует.

tun5 работает

1
задан 4 October 2017 в 09:47
1 ответ

Устройство "tun5" не существует. печатается в stderr (стандартная ошибка).
Ваш скрипт перехватывает только stdout (стандартный вывод).

Вы можете перенаправить stderr на stdout, чтобы устранить проблему (конечный 2> & 1 ).

OUT="$(ip a show $i up 2>&1)"
5
ответ дан 3 December 2019 в 17:02

Теги

Похожие вопросы