3

私は bash スクリプトを初めて使用し、ローカルの Wordpress データベースとリモートのデータベースを同期するスクリプトを作成しようとしています。ここにあります:

#!/bin/sh 

RUSER=example-admin 
RHOST=ftp.example.com 
RDBUSER=wp_admin
RDB=wp_db
RDBHOST=localhost
RBAK=.backup/latest-remote-db.mssql 

LUSER=root
LPASS=root
LHOST=localhost
LDB=wp_db
LBAK=.backup/latest-local-db.mssql 

#dump the contents of my local database
mysqldump -u$LUSER -p$LPASS -h $LHOST $LDB > $LBAK

#upload my local database to remote
scp $LBAK $RUSER@$RHOST:~/.backup/

#login to remote host, backup remote database, delete the remote database then recreate it, restore it with the contents of my local database
ssh $RUSER@$RHOST 'mysqldump -uwp_admin -h localhost wp_db > ~/.backup/latest-remote-db.mssql; mysql -uwp_admin -h localhost -Bse "show databases; drop database wp_db; create database wp_db;"; mysql -uwp_admin -h localhost wp_db < ~/.backup/latest-local-db.mssql;'

ssh上記は正常に機能しますが、すべての値がハードコーディングされているため、最終的なコマンドには満足できません。私はこのようなものを使用したいと思います:

ssh $RUSER@$RHOST 'mysqldump -u$RDBUSER -h $RDBHOST $RDB > ~/$RBAK; mysql -u$RDBUSER -h $RDBHOST -Bse "drop database $RDB; create database $RDB;"; mysql -u$RDBUSER -h $RDBHOST $RDB < ~/$LBAK;'

ただし、すべての変数が引用符で囲まれているため、置換されないため、これは明らかに機能しません。これを達成するためのより良い方法について誰かアドバイスできますか? すべてのコマンドを処理するために、リモート エンドで別のスクリプトを実行することを検討しましたがmysql、それはより非効率的だと思います。

4

1 に答える 1

2

変数が展開されるように、最も外側の引用符には二重引用符を使用します。内部で一重引用符を使用します。

これを試して:

ssh $RUSER@$RHOST "mysqldump -u$RDBUSER -h $RDBHOST $RDB > ~/$RBAK; mysql -u$RDBUSER -h $RDBHOST -Bse 'drop database $RDB; create database $RDB;'; mysql -u$RDBUSER -h $RDBHOST $RDB < ~/$LBAK;"
于 2012-11-01T11:57:15.217 に答える