标签: c unix terminal stdin
如果我运行命令行程序mysql,如
mysql -u someone -p < sql-file
因此需要密码(-p),它会提示输入密码:
-p
Enter password:
但是,正如您从上面所看到的,标准输入实际上是一个文件sql-file。
sql-file
“mysql”(或类似程序)如何做到这一点?
(请注意,这不是关于MySQL的问题,我对C程序如何像这样访问终端感兴趣。)
答案 0 :(得分:4)
以读取模式打开/dev/tty作为文件,然后从中读取。
/dev/tty
答案 1 :(得分:2)
通常直接从终端读取密码。事实上,有一个函数getpass可以做到这一点。
getpass
答案 2 :(得分:0)
当您在文件中管道时,它会出现在stdin上。读取密码的应用程序通常会打开一个单独的输入流。
实现目标的最佳方法是使用Expect。
#!/usr/bin/expect -f spawn mysql expect "*password*" send "your_password_here"