cat に入力を文字列ではなくファイルとして解釈させる

cat に入力を文字列ではなくファイルとして解釈させる

cat入力がファイルの文字列であるかどうかに応じて、2 つの異なる動作があります。 ファイルを PDF ビューア (Zathura) にパイプするために使用する必要がありますcat。ファイル名は、次のように変更された文字列に基づいていますsed

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

test.texこのワンライナーでファイル名の文字列を に変換し、それを Zathura にパイプして対応するファイルを開くようにします。上記のコマンド ラインは、入力がファイルではなく文字列として解釈されるtest.pdfため機能しません。cat

明らかに、

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

が動作しないので、 をいじってみることにしましたcat

答え1

つまり、次のことではありませんか:

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

そのため、結果はstdin ではなく へ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/')

関連情報