非常奇怪的重定向行为
Very weird redirection behavior
我执行了一个打印一些文本的程序。我使用 >
将文本重定向到文件,但我看不到文件上的任何文本。例如,如果程序打印 "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
中)并尝试打印一些包含大量文本的日志。我试图通过重定向保存它,但它不起作用。
我确实检查了 >
符号是否有效。它在 echo
、ls
等其他程序上按预期工作。
$ echo hello > hello.txt
$ cat hello.txt
hello
消息怎么就消失了?我认为它应该打印在stdout
(或stderr
)或文件上。但是当我使用 >
符号时它就消失了。
尝试使用应该将 stderr 重定向到文件的“2>”
或者您也可以尝试使用“&>”来重定向所有内容(stderr 和 stdout)
查看更多
程序检查 isatty(stdout)
并根据 stdout 是否连接到终端显示不同的输出是很常见的。例如,如果输出到终端,ls
将以表格格式显示文件名,否则每行显示一个文件名。它这样做是为了在它是管道的一部分时更容易解析它的输出。
我自己没有查看 Chrome 的源代码,这是推测,但可能 Chrome 正在执行此类检查并根据 stdout 重定向到的位置更改其输出。
我执行了一个打印一些文本的程序。我使用 >
将文本重定向到文件,但我看不到文件上的任何文本。例如,如果程序打印 "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
中)并尝试打印一些包含大量文本的日志。我试图通过重定向保存它,但它不起作用。
我确实检查了 >
符号是否有效。它在 echo
、ls
等其他程序上按预期工作。
$ echo hello > hello.txt
$ cat hello.txt
hello
消息怎么就消失了?我认为它应该打印在stdout
(或stderr
)或文件上。但是当我使用 >
符号时它就消失了。
尝试使用应该将 stderr 重定向到文件的“2>”
或者您也可以尝试使用“&>”来重定向所有内容(stderr 和 stdout)
查看更多程序检查 isatty(stdout)
并根据 stdout 是否连接到终端显示不同的输出是很常见的。例如,如果输出到终端,ls
将以表格格式显示文件名,否则每行显示一个文件名。它这样做是为了在它是管道的一部分时更容易解析它的输出。
我自己没有查看 Chrome 的源代码,这是推测,但可能 Chrome 正在执行此类检查并根据 stdout 重定向到的位置更改其输出。