bash - 在 bash 中重定向管道输出
问题描述
在 bash 中运行此命令
echo hello | > ./out
文件./out
为空,没有打印任何内容。
所以我想知道,这里到底发生了什么?我希望这是一个错误。
谢谢, 福斯
解决方案
这相当于:
echo | true
总而言之,管道输出连接到一个子shell,但由于重定向运算符>
是第一个由shell执行的,并且由于该子shell没有初始输入,因此您将得到一个空的a.out。
甚至echo xxx | > a.out
会给你一个空的 a.out 文件。
更清楚地说,> a.out
在管道的右侧意味着一个子壳。在处理任何管道输入之前,此子 shell 将首先执行重定向运算符。
因此,您的问题的标题是错误的,您没有使用此命令在此处重定向任何管道输出。您只是重定向在管道右侧调用的子外壳的输出。
推荐阅读
- swift - 如何从故事板创建的 UIButtons 中随机定位?[swift Xcode]
- r - 隐藏在 R 中的函数
- python - 使用 selenium 导航到新页面时丢失 cookie
- python - 代码中的elif函数错误
- java - 为什么我们需要将 Native Hibernate Exceptions 转换为 Spring DataAccessExceptio
- reactjs - 在 redux 中在哪里查找在动作生成器中传递的参数
- php - PHP Mysql 搜索前缀
- javascript - Sentry 用户反馈模式未弹出 onClick
- dafny - 不稳定的长计算
- jquery - 尝试使用按钮删除第一个附加的 div 也会删除 jquery 中的第二个附加的 div