Назад | Перейти на главную страницу

Как сигнализировать о наличии шаблона с помощью кода выхода, не изменяя STDOUT

Мне нужно бежать cmd1. Если и только если PATTERN отсутствует в его STDOUT, мне нужно запустить cmd2 слишком:

cmd1 | grep "$PATTERN"  ||  cmd2

Но я бы хотел увидеть все вывод cmd1, а не только строки, соответствующие PATTERN.

Я знаю, что могу сделать что-то вроде этого:

OUTPUT=`cmd1`
echo "$OUTPUT"
echo "$OUTPUT" | grep -q "$PATTERN"  ||  cmd2

но это отделит STDOUT от STDERR. Также я бы предпочел иметь удобный однострочник. Итак, я ищу вариант в grep или альтернативу grep, говоря "Не фильтровать, просто установить код выхода".

Как насчет использования tee чтобы отправить вывод на tty следующим образом:

cmd1 | tee /dev/tty | grep "$PATTERN"  ||  cmd2

Пример с PATTERN соответствие cmd1вывод:

% echo "cmd1 output" | tee /dev/tty | grep -q "output" || echo "nothing matches PATTERN"
cmd1 output

Пример с PATTERN не соответствует cmd1вывод:

% echo "cmd1 output" | tee /dev/tty | grep -q "outputttt" || echo "nothing matches PATTERN"
cmd1 output
nothing matches PATTERN