
cat
有兩種不同的行為,取決於其輸入是否是檔案字串。我需要使用cat
管道將文件傳輸到我的 PDF 檢視器 (Zathura)。檔案名稱基於修改後的字串,sed
如下所示:
cat <(echo test.tex | sed 's/[^.]*$/pdf/') | zathura -
我希望這個襯墊將文件名字串轉換test.tex
為test.pdf
並將其通過管道傳遞給 Zathura 以打開相應的文件。上面的命令行不起作用,因為cat
輸入被解釋為字串而不是檔案。
明顯地,
echo test.tex | sed 's/[^.]*$/pdf/') | zathura
不起作用,這就是為什麼我嘗試亂搞cat
.
答案1
你不是說:
cat $(echo test.tex | sed 's/[^.]*$/pdf/') | zathura -
這樣你的結果sed
就是一個參數,cat
而不是它的標準輸入。
您也可以使用:
cat $(basename $file .tex).pdf | zathura -
或者
cat ${file%.*}.pdf | zathura -
答案2
我不建議透過STDIN
提供自動文件更新或 SyncTeX 等功能的文件檢視器來開啟文件。這樣做會破壞原始文件和軟體之間的鏈接,因為打開的文件將是原始文件的副本。顯示的文件實際上類似於/tmp/zathura.stdin
.這可能會導致安全性問題,並且當重新編譯 LaTeX 原始檔時,軟體中的顯示將不會更新。
cat
那麼,當您可以簡單地將檔案名稱作為參數傳遞時,為什麼還要麻煩呢:
zathura $(basename file.tex .tex).pdf
或使用sed
zathura $(echo file.tex | sed 's/[^.]*$/pdf/')