程序如何在输入重定向后读取控制台输入?

时间:2012-09-23 01:35:58

标签: command-line io-redirection

我总是发现命令行mysql实用程序有点令人惊讶,因为你可以这样做:

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

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

我怀疑这是某种/dev/tty/dev/pty魔法,但我很欣赏这种明显魔法的正确解释:)(以及为什么这些程序可以在任何平台上进行,甚至窗口)。

1 个答案:

答案 0 :(得分:3)

正如你猜测的那样,它正在使用/dev/tty,这是以这种方式指定的:

  

在每个流程中,[/dev/tty是]与该流程的流程组关联的控制终端的同义词(如果有)。无论输出如何被重定向,它对于希望确保向终端写入消息或从终端读取数据的程序或shell过程都很有用。它还可以用于需要输出文件名称的程序,当需要输入类型时,找出当前正在使用的终端是很烦人的。

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

[link]