Comment s'échapper! dans le mot de passe?


24

Comment échapper au point d'exclamation dans un mot de passe:

$ mysql -umyuser -pone_@&!two
-bash: !two: event not found

Essayer la barre oblique inverse n'a pas aidé:

$ mysql -umyuser -pone_@&\!two
[1] 22242
-bash: !two: command not found
name@domain.com [~]# ERROR 1045 (28000): Access denied for user 'myuser'@'localhost' (using password: YES)

Toutes mes recherches Google suggèrent que la barre oblique inverse aiderait, mais ce n'est pas le cas. Il n'y a aucun moyen d'utiliser des guillemets comme suggéré dans cette question . La ligne sera utilisée dans un alias .bashrc. Ne vous inquiétez pas, les noms d'utilisateur et mots de passe indiqués ici ne sont que des exemples et ne sont pas utilisés en production!


vous pouvez toujours utiliser des guillemets simples. pour utiliser un guillemet simple "à l'intérieur" d'une chaîne entre guillemets simples, essayez:''\'
cas

6
BTW, mettre le mot de passe sur la ligne de commande est un risque de sécurité potentiel sur un système multi-utilisateur. Il est très simple d'examiner les arguments de ligne de commande de tout processus en cours d'exécution. Utilisez plutôt un fichier .my.cnf (n'oubliez pas chmod 600).
cas

Oops. c'est '\''pas''\'
cas

Merci, Craig. En fait, c'est plus sûr que l'alternative: envoyer à chacun une copie du mot de passe qui sera ensuite stocké qui sait où. Personnellement, je préférerais que chaque développeur ait son propre /home/userutilisateur et mysql, mais je ne suis pas le décideur à cet égard.
dotancohen

2
la direction est sage et omnisciente :)
cas

Réponses:


38

Utilisez des guillemets simples autour du mot de passe comme ceci: -p'one_@&!two'

Pour le mettre dans un alias, vous feriez quelque chose comme:

alias runmysql='mysql -umyuser -p'\''one_@&!two'\'''


1
pas d'espace entre le -p et le mot de passe, mais oui, cela devrait fonctionner
mulaz

déjà édité l'espace :)
cas

4
-bash: !two: command not found

Vous devez également échapper au &personnage:

$ mysql -umyuser -pone_@\&\!two

3

Si vous n'utilisez jamais le! fonctionnalités d'historique, il peut être plus pratique de simplement les désactiver (avec set +Hdans votre bashrc).


1

Vous pouvez stocker le mot de passe dans une variable bash:

$ pass='one_@&!two'

Remplacez ensuite la variable dans la commande:

$ mysql -umyuser -p$pass

réponse intéressante;)
chapskev
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.