2016-09-08 7 views
-2

こんにちは、シェルスクリプトからMySQLクエリを実行しようとしています。シェルスクリプトでmysqlクエリを実行するバックティックが動作していません

mysql -u root -p'1234' -e "CREATE TABLE $DB.aa_vv_cc 
(
id int(10) unsigned NOT NULL AUTO_INCREMENT, 
city varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
lat varchar(255) DEFAULT NULL, 
`long` varchar(255) DEFAULT NULL, 
status int(11) NOT NULL DEFAULT '1', 
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
updated_at timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
PRIMARY KEY ('id') 
);" 

「長い」にエラーが発生しています。バック・チックがシェル・スクリプトから機能していません。

+0

As Longはmysqlの予約語ですが、列名として使用しないでください。 – Jens

答えて

1

バックシェルはシェル内にCommand Substitutionです。

そして、二重引用符で囲まれた文字列で評価されます。

だから、シェルは、あなたの文字列の

`long` 

を見て、失敗し、おそらく、コマンドlongを実行し、しようとしています。

は、あなたはそれを防ぐために、二重引用符で囲まれた文字列で

\`long\` 

をバッククォートをエスケープ(またはそれらを評価しません単一引用符で囲まれた文字列を使用)あなたは試してみて

'... `long` ...' 
0

をする必要がありますここで私は2つのものを変更している'long'\'long\'PRIMARY KEY ('id')で置き換えますPRIMARY KEY (id)このクエリは、私のシェルスクリプトの仕事です。testはの名前です10。

mysql -u root -p'1234' -e "USE test;CREATE TABLE $DB.aa_vv_cc (id int(10) unsigned NOT NULL AUTO_INCREMENT,city varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,lat varchar(255) DEFAULT NULL,\`long\`varchar(255) DEFAULT NULL, status int(11) NOT NULL DEFAULT '1', created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at timestamp NOT NULL DEFAULT '0000-00-0000:00:00',PRIMARY KEY (id));" 
関連する問題