Pipe
讓 cat 將輸入解釋為文件(不是字元串)
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/')