Shell
程序在輸入之前啟動
man -k . | fzf -e --tiebreak=begin | awk '{print $1}' | xargs man -Tpdf | zathura - # searches for a man page and then outputs it as pdf to zathura
此命令允許使用者選擇手冊頁,然後顯示該頁面。它工作得很好,除了 zathura 在等待使用者做出選擇時開始空白,這導致 zathura 獲得輸入。必須將焦點從 zathura 轉移回終端,然後再回到 zathura,這真的很煩人。
我對腳本相當陌生,所以我認為可能有一種我不知道的解決方法。
最好不要
ifne
。
這就是管道與它們之間的管道同時執行命令的全部意義。
對於順序執行的命令,您需要無限大小的管道,或者將輸出儲存到臨時文件中。
使用
zsh
,可以通過以下方式完成:zathura =( man -k . | fzf -e --tiebreak=begin | awk '{print $1}' | xargs -rd '\n' man -Tpdf )
(這裡添加特定於 GNU 的
-r
和-d '\n'
選項,因為我們不想要預設的解析模式並且如果沒有輸入也xargs
不想執行)。man
where
=(cmd)
擴展為臨時文件的路徑,而不是包含cmd
曾經返回的輸出(特定於cmd
的第三種形式的程序替換zsh
)。zathura
命令返回後,臨時文件將自動刪除。
也許我在這裡遺漏了一些東西——在我看到這個問題之前,我從未聽說過
fzf
(或者zathura
,就此而言),而且我的系統上沒有它們可供測試。但是……不是fzf
從列表中選擇一個項目的重點嗎?讓我換個說法: 從列表fzf
中選擇***一項不是重點嗎?***這裡不是xargs
矯枉過正嗎?基本不是邏輯select a man page and then display it
?
fzf
GitHub 上的頁面建議使用. 以下應該有效:$(fzf *args*)
mp=$(man -k . | fzf -e --tiebreak=begin | awk '{print $1}') && [ -n "$mp" ] && man -Tpdf "$mp" | zathura - &
從使用者輸入中讀取使用者選擇的手冊頁 ,然後顯示它。不需要(顯式)臨時文件。(
2> /dev/null
如果您認為它是有益的,請添加。)