非常奇怪的重定向行为

时间:2015-04-10 12:24:38

标签: linux shell ubuntu redirect io-redirection

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

$ ./a.out arg
Hello

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

$ ./a.out arg > log.txt
(print nothing)

$ cat log.txt
(print nothing)

我不知道发生了什么。有人知道这里发生了什么吗?或者是否有人遭遇过类似情况?

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

当然,我检查了>符号是否有效。它在echols等其他程序上按预期工作。

$ echo hello > hello.txt
$ cat hello.txt
hello

消息如何消失?我认为应该打印在stdout(或stderr)或文件上。但是当我使用>符号时,它就会消失。

2 个答案:

答案 0 :(得分:3)

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

我自己没有看过Chrome的源代码,这是猜测,但Chrome可能会执行此类检查并根据stdout重定向到的位置更改其输出。

答案 1 :(得分:-1)

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

或者您也可以尝试使用“&>”应该重定向一切(stderr和stdout)

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html

了解详情