在回复 通过 tee 将文件传递给 tail 和 head 时,当处理大文件时,以下结构中的
head
出现了奇怪的行为:#! /bin/bash
for i in {1..1000000} ; do echo $i ; done > /tmp/n
( tee >(sed -n '1,3p' >&3 ) < /tmp/n | tail -n2 ) 3>&1 # Correct
echo '#'
( tee >(tac | tail -n3 | tac >&3 ) < /tmp/n | tail -n2 ) 3>&1 # Correct
echo '#'
( tee >(head -n3 >&3 ) < /tmp/n | tail -n2 ) 3>&1 # Not correct!?
输出:
1
2
3
999999
1000000
#
1
2
3
999999
1000000
#
1
2
3
15504
15
问题:
为什么最后一行的输出与前两行不同?
cat
( tee >(head -n3 >&3; cat > /dev/null ) < /tmp/n | tail -n2 ) 3>&1
使其正常工作。 - chorobased
会更清晰。 - spbnick