首页 > 解决方案 > 如何在 BASH 中使用进程替换字符串?

问题描述

我知道我可以做类似的事情

cat <(cat somefile)

但我想建立一串<(). 所以:

for file in *.file; do
    mySubs="${mySubs} <(cat ${file})"
done

cat ${mySubs} #cat <(cat 1.file) <(cat 2.file) ... <(cat something.file)

无需使用eval.

标签: bashprocess-substitution

解决方案


直接使用命名管道。用于mktemp为每个管道创建临时文件名,以便您可以在完成后删除它们。

fifos=()
for f in file1 file2 file3; do
    t=$(mktemp)
    mkfifo "$t"
    pipes+=("$t")
    someCommand "$f" > "$t" &
done

someOtherCommand "${pipes[@]}"
rm "${pipes[@]}"

推荐阅读