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

相关内容