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

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. Не волнуйтесь, имена пользователей и пароли, показанные здесь, являются только примерами и не используются в производстве!

dotancohen
источник
Вы всегда можете использовать одинарные кавычки. чтобы использовать одинарные кавычки "внутри" строки в одинарных кавычках, попробуйте:''\'
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
user7341695
источник
интересный ответ;)
чапскев