我正在编写一个脚本,用于在一组服务器上恢复主从复制。在bash中,我迷失了语法,在尝试使用本地值来分配一个远程运行命令替换的结果的局部变量时:
function doRemote() {
ssh s1.domain.com <<ENDSSH
mysql -u root -pXXX --execute="DROP DATABASE db; CREATE DATABASE db;"
mysql -u root -pXXX --database=db < $WORKDIR$FILENAME
sudo rm -rf /var/log/mysql/db-bin.*
mysql -u root -pXXX --execute="FLUSH LOGS;"
CURRENT_LOG=`mysql -u root -pXXX --execute="SHOW MASTER STATUS" -AN | awk '{print $1}'`
CURRENT_POS=`mysql -u root -pXXX --execute="SHOW MASTER STATUS" -AN | awk '{print $2}'`
# ...
ENDSSH
}
问题出在赋值CURRENT_*变量的两行代码上:执行mysql -u...
命令时会在本地而非远程会话中执行。
请指导如何远程运行该命令,并将本地变量赋值为远程mysql命令的结果。
CURRENT_LOG=$(ssh s1.somain.com "mysql -u root -pXXX --execute=\"SHOW MASTER STATUS\" -AN | awk '{print \$1}'")
- Serge