¡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!

dotancohen
fuente
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'\'''

cas
fuente
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
quanta
fuente
3

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

Richard Kettlewell
fuente
1

Puede almacenar la contraseña en una variable bash:

$ pass='one_@&!two'

Luego sustituya la variable en el comando:

$ mysql -umyuser -p$pass
usuario7341695
fuente
respuesta interesante;)
chapskev