如何在bash脚本远程命令结果赋值局部变量? [英] How to assign local variable with a remote command result in bash script?

查看:570
本文介绍了如何在bash脚本远程命令结果赋值局部变量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在写一个脚本来恢复在一组服务器的主从复制。迷失在bash语法尝试将本地变量分配具有远程运行命令替换本地值的结果是:

I'm writing a script to restore Master-Slave replication on a set of servers. Lost in bash syntax trying to assign a local variable with a result of a remotely ran command substitution with local values:

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 ... 命令获取本地执行,而不是远程会话。

The two lines assigning CURRENT_* variables are the problem: the mysql -u... command gets executed locally, instead of remote session.

请指点如何在远程运行,具有远程MySQL命令的结果分配局部变量。

Please advice how to run that remotely, assigning the local variable with a result of a remote mysql command.

推荐答案

尝试逃离 ENDSSH 如下图所示,使变量赋值在远程主机上出现:

Try escaping ENDSSH as shown below, so that variable evaluation occurs on the remote host:

ssh s1.domain.com <<\ENDSSH
    # ...
ENDSSH

这篇关于如何在bash脚本远程命令结果赋值局部变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆