¡Cómo escapar! en contraseña?


24

¿Cómo se puede escapar del signo de exclamación en una contraseña:

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

Probar la barra oblicua obvia no ayudó:

$ 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)

Todas mis búsquedas en Google sugieren que la barra invertida ayudaría, pero no es así. No hay forma de usar citas como se sugiere en esta pregunta . La línea se usará en un alias .bashrc. ¡No se preocupe, los nombres de usuario y las contraseñas que se muestran aquí son solo ejemplos y no se usan en producción!


siempre puedes usar comillas simples. para usar una comilla simple "dentro" de una cadena entre comillas simples, intente:''\'
cas

66
Por cierto, poner la contraseña en la línea de comando es un riesgo potencial de seguridad en un sistema multiusuario. Es trivialmente fácil examinar los argumentos de la línea de comandos de cualquier proceso en ejecución. Utilice un archivo .my.cnf en su lugar (recuérdelo chmod 600).
cas

¡Uy! eso es '\'', no''\'
cas

Gracias Craig. En realidad, esto es más seguro que la alternativa: enviar por correo electrónico a todos una copia de la contraseña que luego se almacenará quién sabe dónde. Personalmente, preferiría que cada desarrollador tenga su propio /home/userusuario y mysql, pero no soy el que toma las decisiones a ese respecto.
dotancohen

2
gestión es sabia y todo lo sabe :)
cas

Respuestas:


38

Use comillas simples alrededor de la contraseña como esta: -p'one_@&!two'

Para ponerlo en un alias, harías algo como:

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


1
no hay espacio entre -p y contraseña, pero sí, esto debería funcionar
mulaz

ya editado el espacio :)
cas

4
-bash: !two: command not found

También necesitas escapar del &personaje:

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

3

Si nunca usas el! características del historial, puede ser más conveniente simplemente deshabilitarlas (con set +Hsu bashrc).


1

Puede almacenar la contraseña en una variable bash:

$ pass='one_@&!two'

Luego sustituya la variable en el comando:

$ mysql -umyuser -p$pass

respuesta interesante;)
chapskev
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.