2010-11-12 6 views
4

Si je lance le programme de ligne de commande mysql commeComment "mysql" demande-t-il un mot de passe?

mysql -u someone -p < sql-file 

de sorte qu'un mot de passe est nécessaire (-p), il demande un mot de passe:

Enter password: 

Cependant, comme vous pouvez le voir sur la ci-dessus, l'entrée standard est en fait un fichier, sql-file.

Comment fonctionne "mysql" (ou des programmes similaires)?

(S'il vous plaît noter que ce n'est pas une question sur MySQL en particulier, je suis intéressé par la façon dont un programme C peut accéder au terminal comme celui-ci.)

+1

voir aussi: http://stackoverflow.com/questions/1627138/retrieving-stdin-after-using-the-redirection-operator – aib

Répondre

4

Ouvrir /dev/tty sous forme de fichier en mode lecture, puis lire à partir de là.

+1

Il convient d'ajouter que même si l'entrée standard a été réorienté, le processus a toujours un terminal de contrôle (s'il a été exécuté à partir d'un shell comme décrit). '/ dev/tty' fait référence à ce terminal de contrôle. – caf

2

Les mots de passe sont généralement lus directement depuis le terminal. En fait, il y a une fonction getpass qui fait cela.

0

Lorsque vous placez un fichier dans un fichier, il apparaît sur stdin. Les applications qui lisent les mots de passe ouvrent généralement un flux d'entrée distinct.

La meilleure façon d'atteindre votre objectif est d'utiliser Expect.

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