Intenté el siguiente comando después de ver este video sobre travesuras de tuberías.
man -k . | dmenu -l 20 | awk '{print $1}' | xargs -r man -Tpdf | zathura -
Básicamente imprime una lista de páginas de manual en dmenu para que el usuario seleccione una de ellas, luego usa xargs para ejecutar man -Tpdf %
(imprimir para stdout un pdf del git de página de manual desde la entrada de xargs) y pasar el pdf a un lector de pdf (zathura )
El problema es que (como puede ver en el video) el lector de PDF comienza incluso antes de seleccionar una página de manual en dmenu. Y si hago clic en Esc y no selecciono ninguno, el lector de PDF todavía está abierto y no muestra ningún documento.
¿Cómo puedo hacer que el lector de PDF (y cualquier otro comando en una cadena de tuberías) solo se ejecute cuando su entrada llegue al final del archivo o cuando reciba una entrada? O, alternativamente, ¿cómo puedo hacer que una cadena de tuberías se detenga después de que uno de los comandos encadenados devuelve un estado de salida distinto de cero (de modo que si dmenu devuelve un error por no seleccionar una opción, los siguientes comandos no se ejecutan)?
pipefail
opción de bash mencionada en la respuesta de Kusalandanda.