Ich habe den folgenden Befehl ausprobiert, nachdem ich dieses Video über Pipe Shenanigans gesehen habe.
man -k . | dmenu -l 20 | awk '{print $1}' | xargs -r man -Tpdf | zathura -
Grundsätzlich wird eine Liste von Manpages in das Menü gedruckt, damit der Benutzer eine davon auswählen kann. Anschließend wird xargs zum Ausführen man -Tpdf %
(Drucken, um ein PDF des Manpage-Git aus der Eingabe von xargs zu stdouten) verwendet und das PDF an einen PDF-Reader (zathura) übergeben ).
Das Problem ist, dass (wie Sie im Video sehen können) der PDF-Reader startet, noch bevor ich eine Manpage im Menü auswähle. Und wenn ich auf Esc klicke und keine auswähle, ist der PDF-Reader immer noch geöffnet und zeigt überhaupt kein Dokument an.
Wie kann ich den PDF-Reader (und jeden anderen Befehl in einer Pipe-Kette) so ausführen, dass er nur ausgeführt wird, wenn seine Eingabe das Dateiende erreicht oder wenn er überhaupt eine Eingabe empfängt? Oder wie kann ich alternativ eine Rohrkette zum Stoppen bringen, nachdem einer der verketteten Befehle einen Exit-Status ungleich Null zurückgegeben hat (sodass die folgenden Befehle nicht ausgeführt werden, wenn dmenu einen Fehler zurückgibt, wenn keine Option ausgewählt wurde)?
pipefail
in Kusalandandas Antwort erwähnten Bash- Option verwendet wird.