如何将变量传递给bash脚本中的ssh命令



我是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命令,但这使我更加效率更低。

对最外面的引号使用双重报价,以便扩展变量。在内部使用单个引号。

尝试以下操作:

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;"

相关内容

  • 没有找到相关文章

最新更新