Мне нужно запустить cmd1
. Если и только если ШАБЛОН отсутствует в его STDOUT, мне нужно также запустить cmd2
:
cmd1 | grep "$PATTERN" || cmd2
Но я хотел бы видеть весь вывод из cmd1, а не только строки, соответствовать ШАБЛОНУ.
Я знаю, что могу сделать что-то вроде этого:
OUTPUT=`cmd1`
echo "$OUTPUT"
echo "$OUTPUT" | grep -q "$PATTERN" || cmd2
, но это отделит STDOUT от STDERR. Также я бы предпочел удобный однострочник. Поэтому я ищу вариант в grep или альтернативу grep, говорящую: « Не фильтровать, просто установите код выхода ».
Как насчет использования tee
для отправки вывода на tty следующим образом:
cmd1 | tee /dev/tty | grep "$PATTERN" || cmd2
Пример с ШАБЛОН
соответствие cmd1
:
% echo "cmd1 output" | tee /dev/tty | grep -q "output" || echo "nothing matches PATTERN"
cmd1 output
Пример с ШАБЛОН
, не совпадающим с выводом cmd1
:
% echo "cmd1 output" | tee /dev/tty | grep -q "outputttt" || echo "nothing matches PATTERN"
cmd1 output
nothing matches PATTERN