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

如何正确修改time命令的输入输出路径

如何正确修改time命令的输入输出路径

嗨,我来帮你搞定这个问题!你之前尝试的几个命令失效,核心原因是bash内置的time命令默认会把计时结果输出到标准错误(stderr),而不是标准输出(stdout)——普通的>重定向只能捕获stdout的内容,自然抓不到time的结果。下面给你几种靠谱的实现方式:

方式1:同时捕获命令输出和time结果到日志

如果想把echo hello的内容和time的计时信息都写入日志,可以把stderr重定向到stdout,再统一写入文件:

time echo hello > log 2>&1

这里的2>&1是把文件描述符2(stderr)的内容重定向到文件描述符1(stdout),这样两者的输出都会被>写入log文件。

方式2:只把time结果写入日志,命令输出留终端

要是你只想记录time的计时信息,让echo的内容依然显示在终端,可以用命令组单独重定向stderr:

{ time echo hello; } 2> log

注意大括号{}和命令之间要有空格,结尾的分号不能少——这样echo的stdout会正常输出到终端,而time的stderr会被写入log文件。

方式3:使用外部time命令(更灵活)

bash内置的time功能有限,如果你系统里有外部的time命令(可以用which time查看路径,一般是/usr/bin/time),可以直接用它的参数指定输出文件:

/usr/bin/time -o log echo hello

这个命令会直接把time的计时结果写入log,而echo的内容依然输出到终端;如果想同时把命令输出和time结果都写入日志,加上-a参数追加,再配合重定向:

/usr/bin/time -o log echo hello >> log

顺便解释下你之前的命令为什么失效:

  • time echo hello > log:只重定向了echo的stdout,time的stderr没被捕获,所以log里只有hello,time的结果会显示在终端。
  • bash -c 'time echo hello' > log:子shell里的time输出还是stderr,>只重定向子shell的stdout,所以log里依然只有hello。
  • echo $(time echo hello) > log:命令替换$(...)只会捕获stdout的内容,time的stderr不在其中,所以log里只有hello,time的结果还是会跑到终端,而且echo还会把原本的换行符去掉。

备注:内容来源于stack exchange,提问作者UnitedKingdom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 09:53:10