私はEditLineラッパーを使用してBashとMySQL Ver 14.14 Distrib 5.7.21とLinux(x86_64)でUbuntu 16.04を使用しています。
コマンドラインから直接Webアプリ(WordPress)用のDBスタックを作成しようとしています。
次のMySQL CLIコードを実行してみました。ここで、特権を持つフル特権ユーザーと同じ名前のデータベースインスタンスを作成しました。
cat <<-EOF | mysql -u root -p"$dbrootp_1"
DROP USER IF EXISTS "$domain"@"localhost";
DROP DATABASE IF EXISTS "$domain";
CREATE USER "$domain"@"localhost" IDENTIFIED BY "$dbuserp_1";
CREATE DATABASE "$domain";
GRANT ALL PRIVILEGES ON "$domain".* TO "$domain"@"localhost";
EOF
実行すると、次のエラーが出力されます。
行2のエラー1064(42000):SQL構文にエラーがあります。
行1 "example.com"の近くで使用する正しい構文については、MySQL Serverバージョンのドキュメントを確認してください。
このエラーについて混乱しています。問題は行1にありますか、それとも2にありますか?ここで構文エラーは何ですか?変数拡張を使用する必要があります。
回答に基づいて更新
ユーザーl0b0、私が示した${x}
代替案を試しましたが、"$x"
残念ながら次のエラーが出力されます。
行1のエラー1064(42000):SQL構文が正しくありません。 1行目の「-law.co.il@localhost」の近くで使用する正しい構文については、MySQL Serverのバージョンマニュアルを確認してください。
mysqlにデータをパイピングせずにCatを出力する:
DROP USER IF EXISTS example.com@localhost;
DROP DATABASE IF EXISTS example.com;
CREATE USER example.com@localhost IDENTIFIED BY MYPASSWORD;
CREATE DATABASE example.com;
GRANT ALL PRIVILEGES ON example.com.* TO example.com@localhost;
答え1
@jordanmが指摘したように、ここにファイル引用は文法ではなく文字通りです。だからあなたが望む
mysql -u root -p"$dbrootp_1" <<-EOF
DROP USER IF EXISTS ${domain}@localhost;
DROP DATABASE IF EXISTS ${domain};
CREATE USER ${domain}@localhost IDENTIFIED BY ${dbuserp_1};
CREATE DATABASE ${domain};
GRANT ALL PRIVILEGES ON ${domain}.* TO ${domain}@localhost;
EOF
$domain
または、特殊文字が含まれている場合は、$dbuserp_1
その文字を引用符で囲む必要があります。バックティック:
mysql -u root -p"$dbrootp_1" <<-EOF
DROP USER IF EXISTS \`${domain}\`@localhost;
DROP DATABASE IF EXISTS \`${domain}\`;
CREATE USER \`${domain}\`@localhost IDENTIFIED BY \`${dbuserp_1}\`;
CREATE DATABASE `${domain}`;
GRANT ALL PRIVILEGES ON \`${domain}\`.* TO \`${domain}\`@localhost;
EOF