シェルスクリプトから複数のMySQLクエリを実行したい。
私は次のコードを使用しています:
mysql -u <redacted> -p<redacted> servermail << EOF
CREATE TABLE `virtual_domains` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `virtual_users` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`password` VARCHAR(106) NOT NULL,
`email` VARCHAR(120) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `virtual_aliases` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`source` varchar(100) NOT NULL,
`destination` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
EOF
しかし、私はこれらのエラーメッセージを受け取り続けます:
virtual_domains: command not found
No command 'name' found, did you mean:
Command 'named' from package 'bind9' (main)
Command 'namei' from package 'util-linux' (main)
Command 'lame' from package 'lame' (universe)
Command 'uname' from package 'coreutils' (main)
Command 'nama' from package 'nama' (universe)
Command 'mame' from package 'mame' (multiverse)
Command 'nam' from package 'nam' (universe)
name: command not found
virtual_users: command not found
domain_id: command not found
password: command not found
No command 'email' found, did you mean:
Command 'mail' from package 'mailutils' (universe)
Command 'dmail' from package 'uw-mailutils' (universe)
Command 'kmail' from package 'kmail' (main)
Command 'cmail' from package 'xboard' (universe)
Command 'tmail' from package 'uw-mailutils' (universe)
Command 'rmail' from package 'rmail' (universe)
Command 'rmail' from package 'exim4-daemon-heavy' (main)
Command 'rmail' from package 'courier-mta' (universe)
Command 'rmail' from package 'masqmail' (universe)
Command 'rmail' from package 'postfix' (main)
Command 'rmail' from package 'exim4-daemon-light' (main)
Command 'wmail' from package 'wmail' (universe)
Command 'emil' from package 'emil' (universe)
email: command not found
No command 'email' found, did you mean:
Command 'mail' from package 'mailutils' (universe)
Command 'dmail' from package 'uw-mailutils' (universe)
Command 'kmail' from package 'kmail' (main)
Command 'cmail' from package 'xboard' (universe)
Command 'tmail' from package 'uw-mailutils' (universe)
Command 'rmail' from package 'rmail' (universe)
Command 'rmail' from package 'exim4-daemon-heavy' (main)
Command 'rmail' from package 'courier-mta' (universe)
Command 'rmail' from package 'masqmail' (universe)
Command 'rmail' from package 'postfix' (main)
Command 'rmail' from package 'exim4-daemon-light' (main)
Command 'wmail' from package 'wmail' (universe)
Command 'emil' from package 'emil' (universe)
email: command not found
No command 'email' found, did you mean:
Command 'mail' from package 'mailutils' (universe)
Command 'dmail' from package 'uw-mailutils' (universe)
Command 'kmail' from package 'kmail' (main)
Command 'cmail' from package 'xboard' (universe)
Command 'tmail' from package 'uw-mailutils' (universe)
Command 'rmail' from package 'rmail' (universe)
Command 'rmail' from package 'exim4-daemon-heavy' (main)
Command 'rmail' from package 'courier-mta' (universe)
Command 'rmail' from package 'masqmail' (universe)
Command 'rmail' from package 'postfix' (main)
Command 'rmail' from package 'exim4-daemon-light' (main)
Command 'wmail' from package 'wmail' (universe)
Command 'emil' from package 'emil' (universe)
email: command not found
virtual_aliases: command not found
domain_id: command not found
-bash: source: filename argument required
source: usage: source filename [arguments]
destination: command not found
ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(
uid=0(root) gid=0(root) groups=0(root) INT NOT NULL AUTO_INCREMENT,
VARCHAR(' at line 1
コマンドを1つずつ実行すると、コマンドmysql
が機能します。
次に何を試してみるべきですか?
ヒアドキュメントでは、終了区切り文字が引用されていない限り、変数の展開とコマンド置換が実行されます。あなたの場合、のようなバックティック間の文字列はvirtual_domains
、シェルによってコマンドとして実行されます。
取得したい結果を得るには、EOF
以下のように一重引用符または二重引用符の間に終了区切り文字を引用する必要があります。これにより、拡張と置換が防止されます。
mysql -u <redacted> -p<redacted> servermail << "EOF"
CREATE TABLE `virtual_domains` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
参照してください。Unixシェル-ここでは、文書、バッシュの参照を-ここに文書を
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加