我总是发现命令行mysql
实用程序有点令人惊讶,因为你可以这样做:
gzcat dumpfile.sql.gz | mysql -u <user> -p <options>
和mysql
会提示您输入密码。现在,stdin
中的mysql
被重定向 - 人们希望它从转储文件中读取密码。相反,它以某种方式绕过stdin
并直接前往终端。 ssh
做同样的事情。
我怀疑这是某种/dev/tty
或/dev/pty
魔法,但我很欣赏这种明显魔法的正确解释:)(以及为什么这些程序可以在任何平台上进行,甚至窗口)。
答案 0 :(得分:3)
正如你猜测的那样,它正在使用/dev/tty
,这是以这种方式指定的:
在每个流程中,[
/dev/tty
是]与该流程的流程组关联的控制终端的同义词(如果有)。无论输出如何被重定向,它对于希望确保向终端写入消息或从终端读取数据的程序或shell过程都很有用。它还可以用于需要输出文件名称的程序,当需要输入类型时,找出当前正在使用的终端是很烦人的。
除此之外没有真正的“魔力”。
[link]