Как «mysql» запрашивает пароль? - PullRequest
4 голосов
/ 12 ноября 2010

Если я запускаю программу командной строки mysql, как

 mysql -u someone -p < sql-file

, поэтому требуется пароль (-p), запрашивается пароль:

 Enter password:

Однако, как видно из вышеизложенного, стандартный ввод - это файл sql-file.

Как "MySQL" (или аналогичные программы) делают это?

(Обратите внимание, что это не вопрос о MySQL, в частности, меня интересует, как программа на C может получить доступ к терминалу, как этот.)

Ответы [ 3 ]

4 голосов
/ 12 ноября 2010

Открыть /dev/tty как файл в режиме чтения, а затем прочитать из него.

2 голосов
/ 12 ноября 2010

Пароли обычно читаются прямо с терминала.Фактически, есть функция getpass, которая делает именно это.

0 голосов
/ 12 ноября 2010

Когда вы передаете файл, он приходит на стандартный ввод.Приложения, которые читают пароли, обычно открывают отдельный поток ввода.

Лучший способ достичь вашей цели - использовать Expect .

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