データベーススキーマをアップグレードするためのbashスクリプトは、次のとおりです。スクリプトは、コマンドラインからホスト名とデータベースパスワードを読み取ります。特殊文字を使用したMysqlのコマンドラインパスワードが機能しない
問題は、パスワードが英数字例えば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を参照してください。コードの繰り返しを避けるには、正しく引用符で囲まれていない文字列の代わりに関数を使用する方がよいでしょう。 –