【发布时间】:2011-05-08 19:35:00
【问题描述】:
如果我像运行命令行程序mysql
mysql -u someone -p < sql-file
所以需要密码(-p),它会提示输入密码:
Enter password:
但是,从上面可以看出,标准输入实际上是一个文件,sql-file。
“mysql”(或类似程序)如何做到这一点?
(请注意,这不是专门针对 MySQL 的问题,我对 C 程序如何访问这样的终端感兴趣。)
【问题讨论】:
如果我像运行命令行程序mysql
mysql -u someone -p < sql-file
所以需要密码(-p),它会提示输入密码:
Enter password:
但是,从上面可以看出,标准输入实际上是一个文件,sql-file。
“mysql”(或类似程序)如何做到这一点?
(请注意,这不是专门针对 MySQL 的问题,我对 C 程序如何访问这样的终端感兴趣。)
【问题讨论】:
以读取模式打开/dev/tty作为文件,然后从中读取。
【讨论】:
/dev/tty 指的是这个控制终端。
密码通常直接从终端读取。事实上,有一个函数 getpass 就是这样做的。
【讨论】:
当您通过管道输入文件时,它会出现在标准输入上。读取密码的应用程序通常会打开一个单独的输入流。
实现目标的最佳方式是使用Expect。
#!/usr/bin/expect -f
spawn mysql
expect "*password*"
send "your_password_here"
【讨论】: