在监视调用中使用多个 tee 命令重定向

Use multiple tee commands redirections in a watch call

以下命令使用 tee 处理管道输出两次:

echo -e "ALPHA\nBRAVO" | tee >(head -n 1) >(tail) >/dev/null

正如预期的那样输出:

ALPHA
ALPHA
BRAVO

当尝试像这样用 watch 调用它时:

watch 'echo -e "ALPHA\nBRAVO" | tee >(head -n 1) >(tail) >/dev/null'

它returns:

sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `echo -e "ALPHA\nBRAVO" | tee >(head -n 1) >(tail) >/dev/null'

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

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

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

请注意,这并不比 watch 'bash -c ...'.

更便携