Jak uciec! w haśle?

24

Jak można uciec od wykrzyknika w haśle:

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

Wypróbowanie oczywistego ukośnika odwrotnego nie pomogło:

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

Wszystkie moje wyszukiwania w Google sugerują, że odwrotny ukośnik pomógłby, ale tak nie jest. Nie ma sposobu na użycie cudzysłowów, jak sugerowano w tym pytaniu . Linia będzie używana w aliasie .bashrc. Nie martw się, nazwy użytkowników i hasła pokazane tutaj są tylko przykładami i nie są używane w produkcji!

dotancohen
źródło
zawsze możesz użyć pojedynczych cudzysłowów. aby użyć pojedynczego cudzysłowu „wewnątrz” ciągu jednego cudzysłowu, spróbuj:''\'
cas
6
BTW, umieszczenie hasła w wierszu poleceń stanowi potencjalne zagrożenie bezpieczeństwa w systemie z wieloma użytkownikami. Łatwo jest sprawdzić argumenty wiersza poleceń każdego uruchomionego procesu. Zamiast tego użyj pliku .my.cnf (pamiętaj o chmod 600tym).
cas
ups. to '\''nie''\'
cas
Dzięki Craig. W rzeczywistości jest to bezpieczniejsze niż alternatywa: wysyłanie pocztą e-mail kopii hasła, które następnie będzie przechowywać, kto wie, gdzie. Osobiście wolałbym, aby każdy deweloper miał własnego /home/useri mysql użytkownika, ale nie jestem decydentem w tym względzie.
dotancohen
2
zarządzanie jest mądre i wszechwiedzące :)
cas

Odpowiedzi:

38

Używaj pojedynczych cudzysłowów wokół hasła w ten sposób: -p'one_@&!two'

Aby umieścić to w aliasie, zrobiłbyś coś takiego:

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

cas
źródło
1
nie ma spacji między -p a hasłem, ale tak, to powinno działać
mulaz
już edytowałem przestrzeń :)
cas
4
-bash: !two: command not found

Musisz także uciec od &postaci:

$ mysql -umyuser -pone_@\&\!two
kwanty
źródło
3

Jeśli nigdy nie użyjesz! funkcje historii, wygodniej może być po prostu je wyłączyć ( set +Hw swoim bashrc).

Richard Kettlewell
źródło
1

Możesz przechowywać hasło w zmiennej bash:

$ pass='one_@&!two'

Następnie podstaw zmienną w poleceniu:

$ mysql -umyuser -p$pass
użytkownik7341695
źródło
ciekawa odpowiedź;)
czapskev