Использовать именованную трубу.
С вариациями grep
как progA
и cat
как progB
:
$ cat input
foo
bar
baz
$ grep fool < input > fifo & cat fifo & wait %1 && echo good || echo bad
[1] 13876
[2] 13877
[1]- Exit 1 grep fool < input > fifo
bad
[2]+ Done cat fifo
$ grep foo < input > fifo & cat fifo & wait %1 && echo good || echo bad
[1] 13878
[2] 13879
foo
[1]- Done grep foo < input > fifo
good
[2]+ Done cat fifo
Обратите внимание, что wait
без идентификатора задания всегда будет возвращать 0
независимо от состояния выхода фонового задания и что wait %1
в отдельной команде не будет работать при выходе из задания до запуска wait
. Я бы не хотел запускать это в производство на самом деле. Все это было проверено на bash
кстати и может немного отличаться для других оболочек.