script
から読み取り、いくつかの結果を画面に出力するstdin
というスクリプトがあるとします。
1つのファイルのコンテンツをフィードしたい場合は、次のように入力します。
$ ./script < file1.txt
しかし、複数のファイルの内容を同じ方法でスクリプトにフィードしたい場合はどうすればよいでしょうか。私がこれまでに思いついた最高のものは:
cat file1.txt file2.txt > combined.txt && ./script < combined.txt
2つのコマンドを使用して一時ファイルを作成します。同じことをする方法はありますが、結合されたファイルの作成をバイパスしますか?
cat
とパイプを使用できます:
cat file1 file2 file3 ... fileN | ./script
パイプを使用した一時ファイルなしの例:
join file1.txt file2.txt | ./script
パイプを使用したくない場合は、プロセス置換を伴う入力リダイレクトを使用できます。
./script <(cat file1 file2)
@Jonah Braunの答えを追加するには、スクリプトにもプロセス出力を追加する必要がある場合、つまり、ファイルがディスク上になくても、URL
を使用してcurl
または同様の方法でアクセスする場合があります。ツール。
このようなものを使用して、複数のプロセスのstdout
を取得し、stdin
を介してスクリプトで使用できます。
これは、_multi-input.sh
_の入力コンテンツを処理するスクリプトになります。
_#!/usr/bin/env bash
while read line; do
echo $line
done
_
それをテストします:
_$ ./multi-input.sh < <(cat <(echo process 1) <(echo process 2) <(echo process 3))
_
出力:
_process 1
process 2
process 3
_
<()
は、file
を使用してプロセスを仮想fd
に変換します。そのため、読み取るには_<
_が必要です。 cat
自体は、仮想ファイルまたは実ファイルの役割を果たし、ファイルを連結するため、それ自体は必要ありません。