【问题标题】:How does "mysql" ask for a password?“mysql”如何要求输入密码?
【发布时间】:2011-05-08 19:35:00
【问题描述】:

如果我像运行命令行程序mysql

 mysql -u someone -p < sql-file

所以需要密码(-p),它会提示输入密码:

 Enter password:

但是,从上面可以看出,标准输入实际上是一个文件,sql-file

“mysql”(或类似程序)如何做到这一点?

(请注意,这不是专门针对 MySQL 的问题,我对 C 程序如何访问这样的终端感兴趣。)

【问题讨论】:

标签: c unix terminal stdin


【解决方案1】:

以读取模式打开/dev/tty作为文件,然后从中读取。

【讨论】:

  • 值得补充的是,即使标准输入已被重定向,该进程仍然有一个控制终端(如果它是从所描述的外壳运行的)。 /dev/tty 指的是这个控制终端。
【解决方案2】:

密码通常直接从终端读取。事实上,有一个函数 getpass 就是这样做的。

【讨论】:

    【解决方案3】:

    当您通过管道输入文件时,它会出现在标准输入上。读取密码的应用程序通常会打开一个单独的输入流。

    实现目标的最佳方式是使用Expect

    #!/usr/bin/expect -f
    spawn mysql
    expect "*password*"
    send "your_password_here"
    

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 2013-09-30
      • 2014-04-26
      • 2012-04-02
      • 2013-03-17
      相关资源
      最近更新 更多