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!

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

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

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

Richard Kettlewell
fonte
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
user7341695
fonte
resposta interessante;)
chapskev 4/01