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

如何在命令嵌套调用时分别重定向stdout与stderr

问题:捕获嵌套命令各自的stdout/stderr到独立文件

问题描述

部分程序(called-command)会将另一个带参数的程序(indirect-command)作为自身参数,例如time、timeout、stdbuf、perf等命令。

我希望将called-command和indirect-command的stdout与stderr分别捕获到独立文件中。

理想的实现逻辑如下(当前写法无法正常运行):

/usr/bin/time -p -- { \
    timeout -k 10 7 { \
        stdbuf -oL { \
            ./main >main_out.log 2>main_err.log; \
        } \
    } 2>timeout.log; \
} 2>time.log

具体需求:

  • 将time命令的stderr输出到time.log
  • 将timeout命令的stderr输出到timeout.log
  • stdbuf的stdout和stderr归入timeout的输出/错误流
  • 程序main的stdout和stderr分别输出到main_out.log和main_err.log

已尝试方案

我知道time命令有-o OUTPUT_FILE选项,但这是time的专属特性,我需要一种通用方法来捕获作为其他命令参数的命令的输出/错误。

我猜测这可能无法通用实现,因为called-command实际仅接收字符串参数,由其自行解析为选项并识别indirect-command,因此它不会特殊处理<或>字符...

  • 网上搜索结果多为管道、&&、||或while循环相关示例,尝试适配后发现不适用
  • 用引号包裹子参数会导致父命令将整个字符串视为命令名,报错类似'timeout -k 10 7...' does not exist
  • 尝试过参考链接中的括号和大括号写法,但调试许久仍无法正常运行
  • 评论中提到tee,但不知如何在此场景使用,且不希望新增进程影响time的结果

提前感谢解答。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:55:19