bash / mysql жалуется на) характер - PullRequest
1 голос
/ 28 августа 2009

Я пытаюсь выполнить это:

$ mysql --user=XXX --password=XXX --batch --skip-column-names \
 -e "SELECT userid, displayname FROM Users" stackoverflowdb | \
split -l 50 -a 5 - "result."

но bash жалуется на) «неожиданный» символ (у меня есть этот символ и несколько других «странных» в моем пароле mysql). Я пытался взять мой пароль в кавычках --password="myweirdpasshere", но тогда mysql не будет входить в систему вообще (возможно, пароль неверный?)

Ответы [ 3 ]

3 голосов
/ 28 августа 2009

Некоторые символы, такие как $, `," и иногда \, сохраняют свое специальное значение в двойных кавычках. Если ваш пароль содержит какой-либо из этих символов, используйте вместо него одинарные кавычки. Вы можете просто отбросить кавычки и поставить \ перед каждым специальным символом.)

3 голосов
/ 28 августа 2009

Вы должны иметь возможность поместить пароль в файл $HOME/.my.cnf, избегая этой проблемы , а также повышая безопасность .

Другой вариант использования $HOME/.my.cnf - это встраивание файла конфигурации в скрипт. Комментарий к документации приводит примеры этого. Для вашего случая это должно быть:

$ mysql --user=XXX --defaults-file <(printf '[client]\npassword=XXX\n') \
--batch --skip-column-names \
-e "SELECT userid, displayname FROM Users" stackoverflowdb | \
split -l 50 -a 5 - "result."
2 голосов
/ 28 августа 2009

Если вы не введете пароль в командной строке, появится интерактивное приглашение. Это может решить вашу ошибку. Просто используйте -p вместо --password=XXX.

Конечно, если вам требуется автоматический доступ к сценарию, это не очень полезный ответ. Было бы более полезно, если бы вы могли создать минимальный пример и сообщить нам точную ошибку, которую дает вам Bash.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...