linux - 非常奇怪的重定向行为

标签 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)

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

操作系统: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)或文件上。但是当我使用 > 符号时它就消失了。

最佳答案

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

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

关于linux - 非常奇怪的重定向行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29561394/

相关文章:

linux - "grep -rnw": search for a string in all files

c - 为什么删除pipe文件后还能通信?

python - 在 enthought canopy 中突破 python shell 提示 "...:"

linux - 无法将 bool 值分配给 bash 中的变量?

php - 是否需要安装特定的邮件程序才能使用 PHP mail() 发送电子邮件?

linux - linux启动后oracle临时ora 12505错误

linux - linux下phpeclipse中xampp的路径配置方法

shell - 调用具有 awk shebang 和参数(vars)的脚本

linux - Chef 中的 apt-get update 和 apt-get upgrade

perl - 通过 cron 运行 perl-script kpcli 失败