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

Мне нужно запустить cmd1 . Если и только если ШАБЛОН отсутствует в его STDOUT, мне нужно также запустить cmd2 :

cmd1 | grep "$PATTERN"  ||  cmd2

Но я хотел бы видеть весь вывод из cmd1, а не только строки, соответствовать ШАБЛОНУ.

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

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

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

2
задан 23 March 2017 в 13:49
1 ответ

Как насчет использования 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
2
ответ дан 3 December 2019 в 11:29

Теги

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