grep
私が私に多くの結果をもたらすことをやっているとしましょう。 grepの出力を使用して、ファイル名を最初の引数として使用するコマンドに渡したいと思います。たとえば -
myCommand filename.txt
私はこのようなことをしたい -
grep "xyz" | myCommand
しかし、myCommandはstdinから読み取られないため、パイプは機能しません。 grepの結果としてディスクに一時ファイルを作成したくありません。メモリなど、他の方法で「ファイル」を生成してmyCommand
使用できますか?
ベストアンサー1
簡単な解決策は、次のようにBashのプロセス代替サポートを使用することです。
myCommand <(grep "xyz" somefile)
これはコマンドの出力をgrep
ファイルディスクリプタに接続してから/dev/fd/NNN
(NNN
fd番号はどこですか)、コマンドの入力ファイルに渡します(たとえば、コマンドは実際に実行できますmyCommand /dev/fd/63
)。このソリューション確かに一時ファイルを作成します。
名前付きパイプを作成し、それを使用してデータを転送することもできます。
$ mkfifo /tmp/myfifo
$ grep "xyz somefile > /tmp/myfifo &
$ myCommand /tmp/myfifo
しかし、実際には、最初の解決策はより簡単です。
スティーブン・チャゼラスは次のように語っています。
zshには、通常の一時ファイルを使用するmyCommand =(grep xyz somefile)もあります(myCommandがパイプを許可できない場合)。
一部のコマンドは、パイプには適用されない入力ファイルへのランダムアクセスを実行できると予想しているため、これは重要です。この構文を使用すると、直接クリーンアップすることなく一時ファイルの利点を享受できます。