我可能无法正确地搜索我的搜索,但是如果在执行的每一秒都被覆盖,我找不到任何方法来收集stderr/stdout
的所有值。
top
之类的命令不会出现问题,因为它会为每秒统计信息向stdout
写一个新页面,但在某些情况下会像curl
那样进展在stderr
中显示并且它每秒被覆盖,我找不到一种方法来收集stderr
的所有每秒值,这是协议分析所需要的。
要添加更多详细信息:
$ curl -o /dev/null --trace-ascii trace --trace-time http://cachefly.cachefly.net/10mb.test
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 10.0M 0 65057 0 0 43039 0 0:04:03 0:00:01 0:04:02 43027^C
$ curl -o /dev/null --trace-ascii trace --trace-time http://cachefly.cachefly.net/10mb.test
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
13 10.0M 13 1376k 0 0 425k 0 0:00:24 0:00:03 0:00:21 425k^C
如您所见,stderr
正在stdout
上显示,但每秒都被覆盖。即使我将它附加到文件,该文件只包含命令终止之前的最后一个值,而我希望该文件包含所有每秒值的列表。
我已经阅读man curl
的每一行,看看是否有可能这样的事情,但也许这不是我应该看的地方。任何帮助/重定向将不胜感激!
感谢您的期待。
答案 0 :(得分:2)
输出包含$'\r'
字符,可将光标移回行首。只需将其替换为文件中的换行符,您就会看到所有行。
sed -i~ 's/\r/\n/g' input
sed
需要读取整个“行”以产生输出,所以如果你不想等到最后,切换到Perl:
curl -o /dev/null --trace-ascii trace --trace-time http://cachefly.cachefly.net/10mb.test 2>&1 \
| perl -pe 'BEGIN{$/="\r"}s/\r/\n/'