为什么不重定向所有输出(“stdout”和“stderr”)?

为什么不重定向所有输出(“stdout”和“stderr”)?

我对stdoutstderr文件描述符的工作原理有一些了解。但有时他们没有捕获所有的输出,我试图理解为什么。例如,克隆到 git 存储库会给出以下输出:

$ git clone [email protected]:Alex23rodriguez/MyRepo
Cloning into 'MyRepo'...
remote: Enumerating objects: 438, done.
remote: Counting objects: 100% (438/438), done.
remote: Compressing objects: 100% (319/319), done.
remote: Total 438 (delta 96), reused 410 (delta 68), pack-reused 0
Receiving objects: 100% (438/438), 13.09 MiB | 1.73 MiB/s, done.
Resolving deltas: 100% (96/96), done.

但将stdout和重定向stderr到文件会产生意想不到的结果

$ git clone [email protected]:Alex23rodriguez/MyRepo &> log
(no output)
$ cat log
Cloning into 'MyRepo'...

我的问题是,其余的打印行发生了什么?

答案1

它们根本就没有被打印过:git可能只是简单地检查stdoutstderr文件描述符是否为 tty,如果不是,它会忽略漂亮打印的详细状态更新。

相关内容