Mar*_*ton 9 shell io-redirection
我有一个预处理命令来输出文件
./preprocess.sh > preprocessed_file
Run Code Online (Sandbox Code Playgroud)
并且preprocessed_file将像这样使用
while read line
do
./research.sh $line &
done < preprocessed_file
rm -f preprocessed_file
Run Code Online (Sandbox Code Playgroud)
有什么方法可以将输出定向到while read line零件而不是输出到 preprocessed_file?我认为除了使用这个 temp 之外应该有更好的方法preprocessed_file。
ctr*_*lor 17
是的!您可以使用流程管道|。
./preprocess.sh |
while IFS= read -r line
do
./research.sh "$line" &
done
Run Code Online (Sandbox Code Playgroud)
进程管道将一个进程的标准输出 ( stdout)传递到下一个进程的标准输入 ( stdin)。
您可以选择在 a 后面放置一个换行符|并将命令扩展到下一行。
注意:a|b等效于b < <(a),但没有魔法文件,并且以更易读的顺序,尤其是当管道变长时。
a|b|c 相当于 c < <(b < <(a))
和
a|b|c|d|e 是 e < < (d < <(c < <(b < <(a))))
您可以使用 bash进程替换:
while IFS= read -r line; do
./research.sh "$line" &
done < <(./preprocess.sh)
Run Code Online (Sandbox Code Playgroud)
进程替换的一些优点: