加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 如何捕获任何shell输出?

发布时间:2020-12-15 18:32:55 所属栏目:安全 来源:网络整理
导读:我们在浏览器中设计一个 shell,它将流输出 shell输出的所有内容. stdout,stderr,什么的. 然而,正如这个小例子向你展示的那样, git clone https://github.com/joyent/node.git ./git.out cat ./git.out 大部分输出都没有给./git.out.这里是小视频,如果你想看
我们在浏览器中设计一个 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读