2017-06-18 6 views
0

私は、新しいユーザーを作成するために、bashスクリプトからMySQLのクエリを実行したい:bashでドット置換を無効にするにはどうすればいいですか?

の$ BUILD変数は、例えば15のため、数に設定され、最終的なクエリは次のようになります
mysql -u root -p$dbpass -e "GRANT ALL PRIVILEGES ON appdb_${BUILD}.* TO [email protected] IDENTIFIED BY 'somepass'" 

mysql -u root -p$dbpass -e "GRANT ALL PRIVILEGES ON appdb_15.* TO [email protected] IDENTIFIED BY 'somepass'" 
スクリプトがあり、データベースと同じ名前のtarアーカイブがある実行されるため、クエリのディレクトリに

しかし...は次のように次のようになります。

mysql -u root -p$dbpass -e "GRANT ALL PRIVILEGES ON appdb_15.tar.gz TO [email protected] IDENTIFIED BY 'somepass'" 

私はこれが起こると思いbecau一致がありますが、ファイル名を変更することはオプションではありません。他のディレクトリへのスクリプトの移動も許可されていません。

バックスラッシュ(appdb_${BUILD}\.*)でドットをエスケープしようとしましたが、何も変更されませんでした。

どうすれば修正できますか?

+1

から15に、ビルド変数を変更それはあなたがエスケープする必要がある点ではないのですが、それはアスタリスクです。なぜそれがドットだと思いましたか?これは正規表現ではありません。 –

+1

また、アスタリスクは二重引用符で通常は展開されません。 – choroba

+0

@SergioTulentsevまあ、私の頭に来たのは、アスタリスクではなくドットについて考えた理由は分かりません。多くの正規表現に私は推測する。とにかく、アスタリスクをエスケープした後、mysqlは '\ *'が何であるかを理解していないと文句を言います... – WombaT

答えて

0

あなたのアプローチに間違いはありませんし、私の場合はうまくいきます。下記参照。あなたが私たちがあなたを助けることができるようになっているエラーは何かを教えてください。

[[email protected] mysql]# ls 
appdb_15.tar.gz test.sh 

[[email protected] mysql]# cat test.sh 
#!/bin/bash 

BUILD=15 
# First Method 
mysql -u root -ptest -e "GRANT ALL PRIVILEGES ON appdb_${BUILD}.* TO [email protected] IDENTIFIED BY 'somepass';" 

# Second Method 
mysql -u root -ptest <<EOF 
GRANT ALL PRIVILEGES ON appdb_${BUILD}.* TO [email protected] IDENTIFIED BY 'somepass'; 
select user, host from mysql.user where user like 'appuser%'; 
EOF 

[[email protected] mysql]# ./test.sh 
user host 
appuser localhost 
appuser1  localhost 

EDIT 1: 私はこれは間違いなく、bashの問題ではないことを言及するのを忘れてしまいました。

EDIT 2:5

+0

あなたのテスト環境に欠陥があります。 'appdb_15.tar.gz'ですが、' $ BUILD'は '5'です。もしそれがバッシュ・グロブ・エクスパンションだったら、ここでトリガーしません。 –

+0

@SergioTulentsev、それが15だったとしても、bash glob展開を引き起こさないでしょう。私も15で試してみましたが、ユーザーを作成することができました – manishr

+0

質問のスニペットが何が起こっているのかを正確に表現していないといけません。 –

関連する問題