我正在制作一个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),以便本地服务器可以决定是否使用该变量退出。
我该怎么解决?
谢谢:)
答案 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
的局部变量中。