在监视调用中使用多个 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 ...'
.
更便携
以下命令使用 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 ...'
.