Como escapar! na senha?


24

Como alguém pode escapar do ponto de exclamação em uma senha:

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

Tentar a barra invertida óbvia não ajudou:

$ 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 as minhas pesquisas no google sugerem que a barra invertida ajudaria, mas não ajuda. Não há como usar aspas, conforme sugerido nesta pergunta . A linha será usada em um alias .bashrc. Não se preocupe, os nomes de usuário e senhas mostrados aqui são apenas exemplos e não são utilizados na produção!


você sempre pode usar aspas simples. para usar aspas simples "dentro" de uma cadeia de caracteres entre aspas, tente:''\'
cas

6
BTW, colocar a senha na linha de comando é um risco potencial à segurança em um sistema multiusuário. É trivialmente fácil examinar os argumentos da linha de comandos de qualquer processo em execução. Use um arquivo .my.cnf (lembre-se chmod 600dele).
22812

oops. isso é '\'', não #''\'
182 de

Obrigado Craig. Na verdade, isso é mais seguro do que a alternativa: enviar por e-mail a todos uma cópia da senha, que será armazenada quem sabe onde. Pessoalmente, eu preferiria que cada desenvolvedor tivesse seu próprio /home/userusuário e o mysql, mas não sou o responsável pela tomada de decisões nesse sentido.
dotancohen

2
gestão é sábio e onisciente :)
cas

Respostas:


38

Use aspas simples ao redor da senha como esta: -p'one_@&!two'

Para colocá-lo em um alias, você faria algo como:

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


1
nenhum espaço entre o -p e senha, mas sim, isso deve funcionar
mulaz

já editado o espaço :)
cas

4
-bash: !two: command not found

Você também precisa escapar do &personagem:

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

3

Se você nunca usar o! recursos de histórico, pode ser mais conveniente simplesmente desabilitá-los (com set +Hno seu bashrc).


1

Você pode armazenar a senha em uma variável bash:

$ pass='one_@&!two'

Em seguida, substitua a variável no comando:

$ mysql -umyuser -p$pass

resposta interessante;)
chapskev 4/01
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.