如何将不断变化的 stderr 附加到文件或 stdout
How to append constantly changing stderr to a file or stdout
我可能无法正确地表达我的搜索,但我找不到任何方法来收集 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
的每一行,看看是否有可能发生这样的事情,但也许那不是我应该看的地方。任何 help/redirection 将不胜感激!
感谢期待。
输出包含 $'\r'
字符,它将光标移回行首。只需将其替换为文件中的换行符,您就会看到所有行。
sed -i~ 's/\r/\n/g' input
sed
需要读取整个 "line" 来产生输出,所以如果你不想等到最后,切换到 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/'
我可能无法正确地表达我的搜索,但我找不到任何方法来收集 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
的每一行,看看是否有可能发生这样的事情,但也许那不是我应该看的地方。任何 help/redirection 将不胜感激!
感谢期待。
输出包含 $'\r'
字符,它将光标移回行首。只需将其替换为文件中的换行符,您就会看到所有行。
sed -i~ 's/\r/\n/g' input
sed
需要读取整个 "line" 来产生输出,所以如果你不想等到最后,切换到 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/'