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/')