Мне нужно бежать 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