我有以下bash腳本來升級我的數據庫模式。腳本從命令行讀取主機名和數據庫密碼。具有特殊字符的Mysql命令行密碼不起作用
的問題是在這裏,如果密碼是字母數字 e.g r00t然後腳本工作。但是,如果密碼包含特殊字符,例如pa ** w0rd,則腳本不起作用並直接退出。請幫我解決一下這個。謝謝。
#!/bin/bash
echo "Enter hostname."
read -p "Hostname [localhost]: " DB_HOST
DB_HOST=${DB_HOST:-localhost}
echo "Enter MySQL root password"
DB_PASS=
while [[ $DB_PASS = "" ]]; do
read -sp "Password: " DB_PASS
done
MYSQL="mysql --force --connect-timeout=90 --host=$DB_HOST -u root --password=${DB_PASS}"
# Apply schema updates. My DBName is "mydb"
# Upgrade schema file is stored in "mysql" folder
$MYSQL mydb -e exit > /dev/null 2>&1 && $MYSQL mydb < "../mysql/upgrade_schema_v.2.1.sql"
更改密碼以僅使用您知道工作的字符。爲了安全起見,您應該再延長密碼。 – Ben
這個問題似乎真的是你試圖存儲命令作爲一個字符串運行。請參閱http://mywiki.wooledge.org/BashFAQ/050,爲了避免代碼重複,最好在這裏使用一個函數,而不是一個字符串,而您在引用時遇到了困難。 –