1

我一直觉得命令行mysql实用程序有点令人惊讶,因为您可以这样做:

gzcat dumpfile.sql.gz | mysql -u <user> -p <options>

mysql会提示您输入密码。现在,stdininmysql被重定向了——人们会期望它从转储文件中读取密码。相反,它以某种方式绕过stdin并直接前往终端。ssh做同样的事情。

我怀疑这是某种魔法/dev/tty/dev/pty但我希望能对这种明显的魔法做出适当的解释:)(以及为什么这些程序可以在任何平台上做到这一点,甚至是 Windows)。

4

1 回答 1

3

正如您所猜测的,它正在使用/dev/tty,它是这样指定的:

在每个进程中,[/dev/tty是与该进程的进程组相关联的控制终端的同义词,如果有的话。无论输出如何重定向,它对于希望确保向终端写入消息或从终端读取数据的程序或 shell 过程很有用。它也可以用于要求输出文件名的程序,当需要键入输出并且查找当前正在使用的终端很烦人时。

除此之外没有真正的“魔法”。

[链接]

于 2012-09-23T01:42:13.717 回答