Как сигнализировать о наличии паттерна через код выхода, не изменяя 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, который говорит: "Не фильтруйте, просто установите код выхода".
1 ответ
Решение
Как насчет использования 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