首页 > 解决方案 > 在 watch 调用中使用多个 tee 命令重定向

问题描述

以下命令使用两次处理管道的输出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'

我应该如何逃避我的命令以将其与手表一起使用?

标签: bashwatchtee

解决方案


进程替换是一种扩展,并非所有 sh 实现都支持它们。不过,您可以使用重定向来规避此限制。喜欢

watch '{ { printf '\''ALPHA\nBRAVO\n'\'' |
           tee /proc/self/fd/3 |
           head -n 1 >&4
         } 3>&1 | tail >&4
       } 4>&1'

请注意,这并不比做更便携watch 'bash -c ...'


推荐阅读