Eu tentei o seguinte comando depois de assistir a este vídeo sobre travessuras de tubos.
man -k . | dmenu -l 20 | awk '{print $1}' | xargs -r man -Tpdf | zathura -
Basicamente, imprime uma lista de páginas de manual no dmenu para que o usuário selecione uma delas, depois usa xargs para executar man -Tpdf %
(imprima para stdout um pdf do manpage git a partir da entrada do xargs) e passe o pdf para um leitor de pdf (zathura )
O problema é que (como você pode ver no vídeo) o leitor de PDF é iniciado antes mesmo de selecionar uma página de manual no dmenu. E se eu clicar em Esc e selecionar nenhum, o leitor de pdf ainda estará aberto, sem nenhum documento.
Como posso fazer com que o leitor de pdf (e qualquer outro comando em uma cadeia de tubulação) seja executado apenas quando sua entrada chegar ao final do arquivo ou quando receber uma entrada? Ou, alternativamente, como posso fazer uma cadeia de tubulações parar depois que um dos comandos encadeados retorna um status de saída diferente de zero (para que, se o dmenu retorne um erro por não selecionar uma opção, os seguintes comandos não sejam executados)?
pipefail
opção do bash mencionada na resposta de Kusalandanda.