Как сбежать! в пароле?


24

Как можно избежать восклицательного знака в пароле:

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

Попытка очевидного обратного слеша не помогла:

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

Все мои поиски в Google предполагают, что обратный слеш поможет, но это не так. Там нет никакого способа использовать кавычки, как предлагается в этом вопросе . Эта строка будет использоваться в псевдониме .bashrc. Не волнуйтесь, имена пользователей и пароли, показанные здесь, являются только примерами и не используются в производстве!


Вы всегда можете использовать одинарные кавычки. чтобы использовать одинарные кавычки "внутри" строки в одинарных кавычках, попробуйте:''\'
cas

6
Кстати, ввод пароля в командной строке является потенциальной угрозой безопасности в многопользовательской системе. Изучить аргументы командной строки любого запущенного процесса довольно просто. Вместо этого используйте файл .my.cnf (не забывайте об chmod 600этом).
Cas

упс. что х годов '\'', а не''\'
Cas

Спасибо, Крейг. На самом деле, это более безопасно, чем альтернатива: отправлять каждому по электронной почте копию пароля, который затем будет храниться, кто знает, где. Лично я предпочел бы, чтобы у каждого разработчика был свой /home/userпользователь и пользователь mysql, но я не принимаю решения в этом отношении.
dotancohen

2
Управление мудр и всеведущ :)
саз

Ответы:


38

Используйте одинарные кавычки вокруг пароля, как это: -p'one_@&!two'

Чтобы поместить его в псевдоним, вы должны сделать что-то вроде:

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


1
нет пробела между
ключом

уже вырезаны место :)
саз

4
-bash: !two: command not found

Вам также нужно убежать от &персонажа:

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

3

Если вы никогда не используете! Особенности истории, может быть удобнее просто отключить их (с помощью set +Hв вашем bashrc).


1

Вы можете сохранить пароль в переменной bash:

$ pass='one_@&!two'

Затем подставьте переменную в команду:

$ mysql -umyuser -p$pass

интересный ответ;)
чапскев
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.