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

时间:2019-01-14 10:35:54

标签: git shell command-line

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

命令是:

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

,因此它不应在屏幕上打印任何内容。但是当身份验证失败时,它仍会打印Password for 'https://xxxx@github.com':

这怎么会发生以及如何使其静音?

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

2 个答案:

答案 0 :(得分:1)

为防止按键记录并解决重定向问题,请通过/dev/tty完成密码提示。在Python的getpass中了解其操作方法。

答案 1 :(得分:1)

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?