以下命令通过使用tee
处理管道的输出两次:
echo -e "ALPHA\nBRAVO" | tee >(head -n 1) >(tail) >/dev/null
如预期的那样输出:
ALPHA
ALPHA
BRAVO
[尝试用这样的手表打电话时:
watch 'echo -e "ALPHA\nBRAVO" | tee >(head -n 1) >(tail) >/dev/null'
返回:
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `echo -e "ALPHA\nBRAVO" | tee >(head -n 1) >(tail) >/dev/null'
我应该如何逃避将其与watch一起使用的命令?
进程替换是扩展,并非所有sh实现都支持它们。您可以使用重定向来规避此限制。喜欢
watch '{ { { printf '\''ALPHA\nBRAVO\n'\'' | tee /proc/self/fd/3
} | head -n 1 >&4
} 3>&1 | tail >&4
} 4>&1'