当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仍会在屏幕上打印?的主要内容,如果未能解决你的问题,请参考以下文章