bash - 管道标准输出到另一个进程的文件描述符
问题描述
到目前为止,这一直在挫败我。我知道如何将我的标准输出重定向到同一进程中的另一个文件描述符。我知道如何将标准输出通过管道传输到另一个进程的标准输入。但是,如果我想将一个进程的标准输出通过管道传输到另一个进程中的文件描述符怎么办?具体来说,对于 while read 的情况...
cat file | while read -u 9 line; do //some stuff; done
如何将 cat 的输出放到 while 循环的文件描述符 9 上?
解决方案
管道专门用于标准输入和输出(文件描述符 0 和 1);它们不会推广到其他描述符。请改用进程替换和输入重定向。
while read -u 9 line; do
...
done 9< <(cat file)
当然,你不应该这样使用cat
;只需使用常规输入重定向
while read -u 9 line; do
...
done 9< file
奖金,符合 POSIX 的答案:使用命名管道。
mkfifo p
cat file > p &
while read line <&9; do
...
done 9< p
推荐阅读
- c# - 为什么我得到一个 SyntaxError: expected expression, got '<) tryng to perform a redirection click a button into SharePoint webpart?
- amazon-web-services - 如何将 AWS CLI 与 Digital Ocean Spaces 结合使用?
- python - 在正则表达式交替中匹配最长字符串的保证方法
- asp.net-mvc - 具有自定义属性的 ASP.NET MVC 5 Windows 身份验证
- swift - 在实例化视图控制器中使用 NSMutableAttributedString 无法引用 UIButton
- reactjs - React - 解析错误:意外字符
- c# - 部署后 Wpf exe 文件崩溃
- r - 仅转换(随机播放)数据框中的 2 个字段
- angularjs - 警告:尝试仅在网络服务器上多次加载 Angular
- sql - 如何在 PostgreSQL 中对包含星号的 VARCHAR 列进行排序