catが入力を(文字列の代わりに)ファイルとして解釈するようにします。

catが入力を(文字列の代わりに)ファイルとして解釈するようにします。

cat入力がファイル文字列かどうかに応じて、2つの異なる動作があります。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/')

関連情報