当stdout和stderr被重定向时,为什么git仍会在屏幕上打印?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当stdout和stderr被重定向时,为什么git仍会在屏幕上打印?相关的知识,希望对你有一定的参考价值。

我想静音我的CI系统中使用的git push命令的输出,这可能会泄漏敏感信息。

命令是:

git --quiet push > /dev/null 2>&1

所以它不应该在屏幕上打印任何东西。但是当auth失败时它仍会打印Password for 'https://xxxx@github.com':

怎么会发生这种情况以及如何将其静音?

更新:虽然我不确定,我猜git调用getpass()或类似的东西直接写入/dev/tty

答案

为了防止密钥记录和解决重定向问题,密码提示是通过/dev/tty完成的。看看这是如何在Python的getpass中完成的。

另一答案

Git显式打开/dev/tty进行读写,用于密码提示。

/dev/tty在1979年左右被添加到Unix中,允许程序获取控制终端的文件描述符,因此当stdin被占用时以及stdout和stderr被重定向时,用户输入成为可能。

How does less take data from stdin while still be able to read commands from user?

以上是关于当stdout和stderr被重定向时,为什么git仍会在屏幕上打印?的主要内容,如果未能解决你的问题,请参考以下文章

命令输出(stdout,stderr)未重定向到管道

标准IO和重定向

IO重定向和管道用法

标准I/O与管道

重定向stdin stdout stderr |

使用系统命令将stdout和stderr输出重定向到文件在perl中不起作用[重复]