Я пытаюсь создать сценарий оболочки для операции mysqldump
(и mysql
), где пароль хранится непосредственно в сценарии. Пароль содержит специальные символы, которые необходимо обрабатывать соответствующим образом. Однако я не могу понять, какая комбинация действительно работает.
Например, следующие действия выполняются непосредственно на консоли:
mysqldump -u the_user --hex-blob --add-drop-table source_db --password=the\$password | mysql -u the_user target_db --password=the\$password
Пароль содержит $
который затем экранируется с помощью \$
. Однако точно такая же команда не работает, когда помещается в shell_script.sh
. Когда я выполняю скрипт, MySQL жалуется
Access denied for user 'the_user'@'localhost'
До сих пор я попробовал следующее в скрипте:
mysqldump -u the_user --hex-blob --add-drop-table source_db --password=the\$password | mysql -u the_user target_db --password=the\$password
mysqldump -u the_user --hex-blob --add-drop-table source_db --password="the\$password" | mysql -u the_user target_db --password="the\$password"
mysqldump -u the_user --hex-blob --add-drop-table source_db --password='the\$password' | mysql -u the_user target_db --password='the\$password'
mysqldump -u the_user --hex-blob --add-drop-table source_db --password="the$password" | mysql -u the_user target_db --password="the$password"
mysqldump -u the_user --hex-blob --add-drop-table source_db --password='the$password' | mysql -u the_user target_db --password='the$password'
Кажется, ни один из них не экранирует пароль должным образом. Из них только первый работает правильно, когда используется непосредственно на оболочке.
Что мне не хватает? Как мне указать пароль, чтобы эти команды также работали из сценария оболочки?