我们在浏览器中设计一个
shell,它将流输出
shell输出的所有内容. stdout,stderr,什么的.
然而,正如这个小例子向你展示的那样,
git clone https://github.com/joyent/node.git >./git.out cat ./git.out
大部分输出都没有给./git.out.这里是小视频,如果你想看看http://screencast.com/t/7zTdPfq7Pr7正在发生什么
我们需要像’top’,’git’这样的命令才能工作,任何想法如何获得它们?
(输出到文件仅用于说明目的,我们会将每行输出流式传输到另一个系统,我们知道最重要的是它没有意义但我希望我的观点足够清楚,以便能够提供洞察力的人.谢谢. )
大多数程序有两个输出:stdout和stderr. stdout是“主要”信息的去向. stderr用于,错误.它也用于各种非重要输出,有时也用于用户提示等.
要捕获所有这些,您需要将stderr重定向到stdout.
somecmd arg1 arg2 arg3 >somefile 2>&1
或者将stderr捕获到单独的文件:
somecmd arg1 arg2 arg3 >stdout.txt 2>stderr.txt
请注意,程序可以使用除stdout / stderr之外的其他输出.它可以确定你的控制台,并在那里基本上“强制”输出.然而,这种情况非常罕见,上述情况将在99%的情况下发挥作用.
如果将stdout和stderr重定向到同一个文件,请记住一件事是stdout和stderr缓冲区不同,因此它在日志文件中看起来与在屏幕上看起来不一样(行将不按顺序排列) ).此外,对于您的特定实例,您的输出将看起来像垃圾. git做了很多终端操作(对于进度指示器),在日志文件中看起来非常糟糕.
编辑
来自man git-clone:
–progress Progress status is reported on the standard error stream by default when it is attached to a terminal,unless -q is specified. This flag forces progress status even if the standard error stream is not directed to a terminal