Pipe

讓 cat 將輸入解釋為文件(不是字元串)

  • March 23, 2020

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.

你不是說:

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

所以你的結果sed是一個參數cat而不是它的標準輸入。

您還可以使用:

cat $(basename $file .tex).pdf | zathura -

或者

cat ${file%.*}.pdf | zathura -

我不建議通過STDIN提供自動文件更新或 SyncTeX 等功能的文件查看器打開文件。這樣做會破壞原始文件和軟體之間的連結,因為打開的文件將是原始文件的副本。顯示的文件實際上類似於/tmp/zathura.stdin. 這可能會導致安全問題,並且當重新編譯 LaTeX 源文件時,軟體中的顯示將不會更新。

cat那麼,當您可以簡單地將文件名作為參數傳遞時,為什麼還要麻煩,如下所示:

zathura $(basename file.tex .tex).pdf

或使用sed

zathura $(echo file.tex | sed 's/[^.]*$/pdf/')

引用自:https://unix.stackexchange.com/questions/574406