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

Linux 如何使用ssh将远程服务器变量存储到本地服务器变量?,linux,bash,shell,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 "Missin

我正在制作一个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
'
但是这个exit命令对本地服务器不起作用,所以会执行后面的代码,这是我不期望的。
我想我必须从远程服务器获取结果变量(VAR),以便本地服务器可以决定是否使用该变量退出。
我如何解决这个问题?
谢谢:)

试试这个:

ssh $REMOTE 'test -e file' && exit
其中
file
是远程服务器上要检查是否存在的文件的名称

远程服务器上的
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的所有命令分组
  • 单引号捕获要在远程服务器上运行的所有命令
  • VAR=$(ssh'…')
    命令将从
    echo$VAR
    获取stdout,并将其放置在名为
    VAR
    的局部变量中

谢谢您的回答,但实际上不仅仅是检查文件是否存在。抱歉提供的信息不足。我只能在远程服务器有某个文件以及该文件有某个变量时执行后续代码。好的,我将在答案中添加更多内容。感谢您的精心设计!!这解决了我的问题:)祝你今天愉快!