首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非常奇怪的重定向行为

非常奇怪的重定向行为
EN

Stack Overflow用户
提问于 2015-04-10 12:24:38
回答 2查看 49关注 0票数 0

我执行一个程序打印一些文本。我使用>将文本重定向到文件中,但是我看不到文件上的任何文本。例如,如果程序打印"Hello“,我可以在shell上看到结果:

代码语言:javascript
复制
$ ./a.out arg
Hello

但是,在重定向之后,我无法在shell和重定向文件上得到任何消息hello。

代码语言:javascript
复制
$ ./a.out arg > log.txt
(print nothing)

$ cat log.txt
(print nothing)

我不知道怎么回事。有人知道这里发生了什么吗?还是有人遭遇过类似的情况?

OS: Ubuntu14.10,x86_64 arch,程序实际上是chromium-browser而不是./a.out。我编辑了它的JavaScript引擎(v8,它包含在chromium-browser中),我尝试用大量文本打印一些日志。我试图通过重定向来保存它,但它不起作用。

当然,我检查了>符号是否有效。它在其他程序(如echols等)上可以正常工作。

代码语言:javascript
复制
$ echo hello > hello.txt
$ cat hello.txt
hello

这些信息怎么就这么消失了?我认为它应该打印在stdout (或stderr)或文件上。但当我使用>符号时,它就消失了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-10 13:39:47

程序检查isatty(stdout)并根据stdout是否连接到终端显示不同的输出,这在某种程度上是很常见的。例如,如果输出到终端,ls将以表格格式显示文件名,但如果不是这样,则严格地每一行显示一个文件名。它这样做是为了便于当它是管道的一部分时解析它的输出。

没有亲自看过Chrome的源代码,这是猜测,但Chrome可能正在执行这种检查,并根据stdout被重定向到的位置更改其输出。

票数 3
EN

Stack Overflow用户

发布于 2015-04-10 13:30:46

尝试使用"2>“,它应该将stderr重定向到文件

或者您也可以尝试使用"&>“来重定向所有东西(stderr和stdout)。

参见http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html的更多信息

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29561394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档