Я попробовал следующую команду после просмотра этого видео на трубе махинаций.
man -k . | dmenu -l 20 | awk '{print $1}' | xargs -r man -Tpdf | zathura -
Он в основном выводит список man-страниц в dmenu, чтобы пользователь мог выбрать один из них, затем использует xargs для запуска man -Tpdf %
(печать выводит PDF-файл man-страницы из ввода xargs) и передает pdf в программу чтения PDF (zathura). ).
Проблема в том, что (как вы можете видеть на видео) программа чтения PDF запускается еще до того, как я выбрал одну страницу в dmenu. И если я нажму «Esc» и не выберу ни один, программа чтения PDF-файлов все еще будет открыта, не показывая никакого документа.
Как я могу заставить программу чтения PDF (и любую другую команду в цепочке конвейеров) запускаться только тогда, когда ее ввод достигает конца файла или когда он вообще получает ввод? Или, в качестве альтернативы, как заставить цепочку конвейера остановиться после того, как одна из цепочечных команд вернет ненулевой статус выхода (так что если dmenu вернет ошибку из-за отсутствия выбора опции, следующие команды не будут выполнены)?
pipefail
опции bash, упомянутой в ответе Кусаланданды.