如何使用ssh将远程服务器变量存储到本地服务器变量?

时间:2020-04-07 04:54:56

标签: linux bash shell

我正在制作一个bash脚本,如果远程服务器具有特定文件和特定内容,则该脚本将退出。
我使用以下代码检查文件:

ssh $DEPLOY_HOST 'VAR=false

if [ -f /filename ]; then
    . /filename
    REMOTEID=$ID
        if [ "$REMOTEID" == "something" ]; then
                VAR=true
        fi
else
    echo "Missing /filename"
fi

if [ "$VAR" == false ]; then
    exit 1
fi
'

但是该退出命令不适用于本地服务器,因此执行了我不希望的后续代码。
我认为我必须从远程服务器获取结果变量(VAR),以便本地服务器可以决定是否使用该变量退出。
我该怎么解决?
谢谢:)

1 个答案:

答案 0 :(得分:1)

尝试一下:

ssh $REMOTE 'test -e file' && exit

其中file是要检查其是否存在的REMOTE服务器上文件的名称。

REMOTE服务器上的test命令中的退出代码将通过ssh的退出代码传递到您的本地Shell中,并与&&运算符一起使用。


如果您需要返回变量的字符串值,则可以使用以下模式:

VAR=$(ssh $REMOTE '
{
    some command
    some other command
    ...
    # all of the stdout from these commands will be discarded
} > /dev/null
echo $VAR # the stdout from here will be returned as stdout from ssh
')

让我们分解一下:

  • {}块将要丢弃stdout的所有命令分组。
  • ''单引号捕获了要在REMOTE服务器上运行的所有命令
  • VAR=$(ssh ' ... ')命令将从echo $VAR中获取标准输出,并将其放置在名为VAR的局部变量中。
相关问题