我很确定我缺少这方面的术语,这可能是谷歌让我失望的原因。是否有一种可移植和简单的方法将标准输出重定向到多个命令。
换句话说,我如何解决这个可移植性问题:
$ /bin/bash -c '(echo to your mom) | tee >(read b; echo "agent 1 reports $b") >(read b; echo "agent 2 reports $b") >(read b; echo "agent 3 reports $b")'
to your mom
agent 1 reports to your mom
agent 2 reports to your mom
agent 3 reports to your mom
$ /bin/zsh -c '(echo to your mom) | tee >(read b; echo "agent 1 reports $b") >(read b; echo "agent 2 reports $b") >(read b; echo "agent 3 reports $b")'
to your mom
agent 1 reports to your mom
agent 3 reports to your mom
agent 2 reports to your mom
$ /bin/sh -c '(echo to your mom) | tee >(read b; echo "agent 1 reports $b") >(read b; echo "agent 2 reports $b") >(read b; echo "agent 3 reports $b")'
/bin/sh: 1: Syntax error: "(" unexpected注意输出顺序不是问题,/bin/sh会产生错误。
发布于 2014-08-02 11:49:59
使用命名管道:
#!/bin/sh
fifo1=$(exec mktemp --dry-run)
mkfifo "$fifo1"
( read b; echo "agent 1 reports $b" ) < "$fifo1" &
fifo2=$(exec mktemp --dry-run)
mkfifo "$fifo2"
( read b; echo "agent 2 reports $b" ) < "$fifo2" &
fifo3=$(exec mktemp --dry-run)
mkfifo "$fifo3"
( read b; echo "agent 3 reports $b" ) < "$fifo3" &
echo to your mom | tee "$fifo1" "$fifo2" "$fifo3"
rm -f "$fifo1" "$fifo2" "$fifo3"用法:
sh script.sh输出:
to your mom
agent 2 reports to your mom
agent 1 reports to your mom
agent 3 reports to your mom这就是科学。有了功能,你可以使技术,使管道容易为您根据您的喜好。
https://stackoverflow.com/questions/25094449
复制相似问题