如何在bash中创建命名管道

时间:2015-04-24 11:50:21

标签: bash named-pipes

此程序运行良好,但如何使用相同的[un]命名管道方法从支持2个文件转到支持n文件?

some_command \ 
    <(tar c --xattrs -C "$1" --pax-option="exthdr.name=%d/PaxHeaders/%f" . | xxd) \
    <(tar c --xattrs -C "$2" --pax-option="exthdr.name=%d/PaxHeaders/%f" . | xxd)

1 个答案:

答案 0 :(得分:2)

不是使用进程替换语法,而是显式创建命名管道。 (进程替换是一种瞬态构造;您不能一次创建一个以节省以供以后使用。)

declare -a pipes
for arg in "$@"; do
    new_pipe_name=pipe$((++i))
    pipes+=( "$new_pipe_name" )
    mkfifo "$new_pipe_name"
    tar c --xattrs -C "$arg" --pax-option="exthdr.name=%d/PaxHeaders/%f" . | 
      xxd > "$new_pipe_name" &
done

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