2016-08-30 7 views
2

bashスクリプトで使用するコマンドpdflatexがあります。それは、それが動作するコンテンツのファイル名を入力として取ります。メモリに一時ファイルを作成し、それをコマンドの入力ファイルとして使用する

今、私は次のように見えるのアルゴリズムを持っている:

for stuff in list of stuff; do 
    echo "${stuff}" > /tmp/tmpStuff 
    pdflatex /tmp/tmpStuff 
done 

期待通りさて、この作品。しかし、私はスピードアップできると思っていましたが、ディスクI/Oを減らして(リダイレクトをファイルに書き込むように)私はecho "$stuff" | pdflatex /tmp/tmpStuffのようなものを書くことができますが、pdflatexは入力としてstdinではなくファイルを使用します。 "$stuff"をメモリに保存し、ファイルの種類としてpdflatexに渡す方法はありますか?

TLDR:名前を付けてメモリに置くことができる一時ファイルを作成できたらうれしいです。全体として

答えて

3

あなたは、このためのプロセス置換を使用することができます。

pdflatex <(echo "$stuff") 

をバッシュリファレンスマニュアルから:

3.5.6 Process Substitution

プロセスの代替ircは、名前付きパイプ (FIFOs)をサポートするシステム、またはオープンファイルの名前を指定する/ dev/fdメソッドでサポートされています。これは、プロセスのリストがFIFOまたは/ dev/fdの中にいくつかのファイルに接続された入力または出力で実行され

<(list) 

または

>(list) 

の形 をとります。このファイルの名前は、展開の結果として現在のコマンドに引数として渡されます。 >(list)フォームが使用されている場合、ファイルへの書き込みはリストの入力を提供します。 <(list)フォームが使用されている場合、引数として渡されたファイルは、listの出力を取得するために読み取られる必要があります。 <または>と左括弧の間にはスペースがないことに注意してください。そうでない場合は、構成がリダイレクトとして解釈されます。

そして、ここでは、文字列は同様にそれを作るかどう私も疑問に思う:

pdflatex <<< "$stuff" 
+0

あなたの答えをありがとう、 '<(echo" $ stuff ")'から出てくる "一時的な"ファイルのファイルを命名する方法はありますか?私はそれがpdflatexでエラーを引き起こすように思えるので、それは不思議です。 – Simonlbc

+1

@Simonlbcいいえ、実際にはありません。これが必要な場合は、[mktemp](http://stackoverflow.com/a/10983009/1983854)を参照してください。 – fedorqui

+0

mktempでファイルを作成した場合、そのファイルはメモリに格納されますか? – Simonlbc

1

多くのシェル、およびLinuxは、受け入れ:

echo "${stuff}" | pdflatex /dev/stdin
+0

あなたの答えをいただき、ありがとうございます。私はちょうどあなたが同時に "|"シンボルと同時に正確な/ dev/stdinにはその理由がありますか? – Simonlbc

+1

http://stackoverflow.com/users/5432899/simonlbc:/ dev/stdinはstdinにアクセスする特定の方法を持たないプログラムのためだけに追加されています...あなたの投稿はpdflatextがその1つであることを暗示しています。単純なケースでは、プロセス置換よりも簡単です。より長い名前を使用することも有用であり、時々自己文書化することができます。 FYI:/ dev/std *系の他の2つも存在します。 – Gilbert

関連する問題