bash - 在 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'
我应该如何逃避我的命令以将其与手表一起使用?
解决方案
进程替换是一种扩展,并非所有 sh 实现都支持它们。不过,您可以使用重定向来规避此限制。喜欢
watch '{ { printf '\''ALPHA\nBRAVO\n'\'' |
tee /proc/self/fd/3 |
head -n 1 >&4
} 3>&1 | tail >&4
} 4>&1'
请注意,这并不比做更便携watch 'bash -c ...'
。
推荐阅读
- r - 仅一个几何/图层的带有阴影标记的 transition_time
- google-cloud-platform - 从 Cloud scheduler 调用 Google Cloud 功能时出现权限被拒绝错误
- graphql - 如何配置 Laravel Lighthouse 为 GraphQL 提供服务器端渲染?
- javascript - 从浏览器打开 android 应用程序:如何在意图 URI 中指定 URI-path/HOST?
- php - 如何将php变量传递给另一个php文件
- security - 托管在 Kubernetes 入口中的应用程序的安全性
- r - 我必须将 collect 与磁盘框架一起使用吗?
- c - 使用队列的简单患者管理程序
- r - 如何删除 stat_density_2d 中的背景?
- uml - BoUML 的状态机生成器是否正确处理退出和进入复合状态?