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!

dotancohen
la source
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'\'''

cas
la source
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
quanta
la source
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).

Richard Kettlewell
la source
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
user7341695
la source
réponse intéressante;)
chapskev