讓 cat 將輸入解釋為檔案(​​而不是字串)

讓 cat 將輸入解釋為檔案(​​而不是字串)

cat有兩種不同的行為,取決於其輸入是否是檔案字串。我需要使用cat管道將文件傳輸到我的 PDF 檢視器 (Zathura)。檔案名稱基於修改後的字串,sed如下所示:

cat <(echo test.tex | sed 's/[^.]*$/pdf/') | zathura -

我希望這個襯墊將文件名字串轉換test.textest.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/')

相關內容