我正在尝试对网络服务器的单个请求进行基准测试,但这样做时遇到问题,具体来说,我在重定向命令的输出时遇到问题time
。
如果我只是跑
time curl "http://www.google.com"
我的结果是全身响应,然后是time
命令的打印输出。
如果我通过重定向运行它
time curl "http://www.google.com" 1> out.log 2> err.log
在out.log
我仍然看到响应的正文,在err.log
我看到curl命令的输出
然而问题是命令的输出time
仍然打印到终端
[501] ~ > time curl "http://www.google.com" 1> out.log 2> err.log
real 0m0.092s
user 0m0.004s
sys 0m0.004s
[502] ~ > cat err.log
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 19093 0 19093 0 0 225k 0 --:--:-- --:--:-- --:--:-- 227k
输出到哪个缓冲区time
,以及如何将其放入文件中?根据我的理解,它应该已通过管道传输到err.log
.
答案1
你可以尝试使用
{ time curl -s https://www.google.com ; } > body.txt 2> time.txt
答案2
如果您不使用 bash-internal 版本而是使用 GNU 工具(例如/usr/bin/time
),您可以-o
选择如下解释的选项man time
:
/usr/bin/time -po outfile.txt curl "http://www.google.com"
将把时间写到outfile.txt
.
GNU time 有许多选项来格式化输出,有关详细信息,请参阅手册页。