![局部变量在 ssh 块内不可访问](https://linux22.com/image/154682/%E5%B1%80%E9%83%A8%E5%8F%98%E9%87%8F%E5%9C%A8%20ssh%20%E5%9D%97%E5%86%85%E4%B8%8D%E5%8F%AF%E8%AE%BF%E9%97%AE.png)
#!/bin/sh
flag="False"
ssh -n $Domain_1@$IP "$( cat <<'EOT'
$flag="True"
cat << 'EOT'
)"
在连接到远程位置之前,flag 等于 false。我只想在远程位置执行一些操作后更改 ssh 块内的 flag 值,并将 flag 值返回到本地变量 flag。 –
答案1
我假设你想做一些类似的事情
#!/bin/sh
flag=$(
ssh -T "$user@$host" <<'END_SCRIPT'
# some operations on
# the remote host goes here
# later...
if some_condition; then
echo true
else
echo false
fi
END_SCRIPT
)
这将在远程主机上执行作为引用的此处文档给出的脚本,并将其输出分配给本地变量flag
。按照我在这里写的方式,我假设该位some operations
确实不是产生任何输出,而远程脚本产生的唯一输出来自两个条件echo
命令之一。
您的flag
变量将被分配字符串true
或false
取决于 的结果some_condition
。
如果您需要使用远程脚本内的值$flag
,则必须使用不带引号的此处文档。然后必须注意正确转义您希望远程发生的任何 shell 扩展(通过将$
这些转义为\$
)。