zshで一時ファイルを避ける

zshで一時ファイルを避ける

重複の可能性:
シェルプログラミング、一時ファイルを避ける

data.txtファイルとコマンドがあるとしましょうcmd

cmd1つのパラメータであるファイルを許可します。またはstdin

saydata.txtは大文字ですが、cmdすべてのデータが小文字の場合にのみ機能します。

もちろん、これを行うことができます

tr '[:upper:]' '[:lower:]' < data.txt > lowercase_data.txt
cmd lowercase_data.txt
rm lowercase_data.txt

しかし、統合する方法はありますか?

元のファイルの周りのラッパーのようにフィルタを適用し、一時ファイルへの参照を渡し、最後に一時ファイルを削除します。

zshを使用しています。

答え1

zshサポートするプロセスの交換、これは要件を満たす必要があります。

A command of the form =(...) is replaced with the name of a file containing its output.

trしたがって、たとえば、出力をに渡すために一時ファイルを手動で生成したくない場合は、次のように言うことができますcmd

cmd =(tr '[:upper:]' '[:lower:]' < data.txt)

他のシェルの場合は次のようになります。

  • bash:cmd <(tr '[:upper:]' '[:lower:]' < data.txt)
  • ksh:cmd <(tr '[:upper:]' '[:lower:]' < data.txt)
  • rc:cmd <{tr '[:upper:]' '[:lower:]' < data.txt}

bashプロセスの置き換えは、一時ファイルではなく名前付きパイプを使用kshして実装されており、マウントされたファイルシステムが必要です。rczsh/dev/fd/

答え2

あなたがやっていることには何の問題もありません。一時ファイルの生成方法を除いて(実行中のスクリプトが同時に2回実行される場合はどうなりますか?)

を使用する必要がありますmktemp

関連情報