如何在 bash 中制作命名管道
How to make named pipes in bash
该程序运行良好,但如何使用相同的 [un] 命名管道方法从支持 2 个文件变为支持 n
文件?
some_command \
<(tar c --xattrs -C "" --pax-option="exthdr.name=%d/PaxHeaders/%f" . | xxd) \
<(tar c --xattrs -C "" --pax-option="exthdr.name=%d/PaxHeaders/%f" . | xxd)
不使用进程替换语法,而是显式创建命名管道。 (进程替换是一种瞬态构造;您不能一次创建一个以保存以备后用。)
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[@]}"
该程序运行良好,但如何使用相同的 [un] 命名管道方法从支持 2 个文件变为支持 n
文件?
some_command \
<(tar c --xattrs -C "" --pax-option="exthdr.name=%d/PaxHeaders/%f" . | xxd) \
<(tar c --xattrs -C "" --pax-option="exthdr.name=%d/PaxHeaders/%f" . | xxd)
不使用进程替换语法,而是显式创建命名管道。 (进程替换是一种瞬态构造;您不能一次创建一个以保存以备后用。)
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[@]}"