You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅用管道和重定向将管道链输出作为文件重定向给命令?

解决方案

原错误写法 command3 < command1 | command2 不符合预期的原因是shell运算符优先级:输入重定向<优先级高于管道|,shell会先尝试读取名为command1的文件内容传入command3,再将command3的输出通过管道传给command2,和需求逻辑完全相反。

符合要求的通用写法如下,全程仅使用管道和重定向,无命令替换、无子shell调用:

command1 | command2 | { read -r target_file; command3 < "$target_file"; }

逻辑说明

  • 前半段command1 | command2正常执行,输出的目标文件名通过管道传递给后续命令块
  • 用read -r读取管道传入的文件名,存入变量target_file
  • 大括号{}包裹的命令块在当前shell上下文执行,不会产生子shell
  • 最后通过<重定向将目标文件的内容输入给command3,完全满足要求

示例对应实现

针对给出的「在最新修改的文件中搜索hello」场景,对应写法为:

ls -t | head -n1 | { read -r new_file; grep "hello" < "$new_file"; }

该实现完全规避了不符合要求的写法:没有使用$()类命令替换,也用到了要求的输入重定向操作符。

内容的提问来源于stack exchange,提问作者wchmb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:27:02