Попробуйте два терминала рядом. В первой оболочке window:
tail -F /tmp/xyzzy
Во втором, как раз то, что вы делали, только с файлом tmp:
my_program | tee /tmp/xyzzy | grep -q "error message"
Запустите их в указанном порядке.
Это неудобно, так как вам нужно время от времени очищать временный файл или выбирать новое имя, но это работает.
Добавлено позже ... Попробуйте что-нибудь вроде:
my_program | tee /tmp/xyzzy ; grep -q "error message" /tmp/xyzzy
Статус выхода последовательности - это статус выхода grep. Который перевернут от того, что вы хотите, вздох. Так что отрицайте это.
my_program | tee /tmp/xyzzy ; ! grep -q "error message" /tmp/xyzzy