I tried the following command after watch this video on pipe shenanigans.
man -k . | dmenu -l 20 | awk '{print $1}' | xargs -r man -Tpdf | zathura -
It basically prints a list of manpages to dmenu for the user to select one of them, then it uses xargs to run man -Tpdf %
(print to stdout a pdf of the manpage git from the xargs' input) and pass the pdf to a pdf reader (zathura).
The problem is that (as you can see in the video) the pdf reader starts even before I select one manpage in dmenu. And if I click Esc and select none, the pdf reader is still open showing no document at all.
How can I make the pdf reader (and any other command in a pipe chain) to only run when its input reach a end-of-file or when it receives an input at all? Or, alternatively, how can I make a pipe chain to stop after one of the chained commands returns a non-zero exit status (so that if dmenu returns an error for not selecting an option, the following commands are not run)?
pipefail
option mentioned in Kusalandanda's answer.