shell - 如何在远程服务器内设置变量值
问题描述
在远程服务器内部,我有一个条件语句。如果该条件通过,状态值应设置为成功。
但是在这里我总是在打印状态变量时收到失败响应
状态='成功';
status='Success';
# !/bin/bash
declare -a server_PP=('XXXXX' 'YYYYYYY' );
declare -A results_map;
function process(){
serverList=$1[@];
servers=("${!serverList}");
status='Failure';
for serverName in "${servers[@]}"
do
ssh $serverName << EOF
if [ -f /app/Release/abc.war ]; then
echo "available - success"
status='Success';
fi
echo "***********status-inside******$status"
exit
EOF
echo "***********status-outside******$status"
results_map+=([$serverName]=$status);
done
}
process 'server_PP'
for i in "${!results_map[@]}"
do
echo "key :" $i
echo "value:" ${results_map[$i]}
done
当满足该条件时,状态变量应设置为成功。
解决方案
正如 pcarter 的评论中所写,两个系统上的变量彼此独立,不会通过ssh
. 您可以使用由ssh
.
以下脚本与原始脚本接近。有关进一步的改进,请参见下文。
# !/bin/bash
declare -a server_PP=('XXXXX' 'YYYYYYY' );
declare -A results_map;
function process(){
serverList=$1[@];
servers=("${!serverList}");
status='Failure';
for serverName in "${servers[@]}"
do
if ssh $serverName << EOF
if [ -f /app/Release/abc.war ]; then
echo "available - success"
exit 0;
fi
echo "error"
exit 1
EOF
then
status='Success'
else
status='Failure'
fi
echo "***********status-outside******$status"
results_map+=([$serverName]=$status);
done
}
process 'server_PP'
for i in "${!results_map[@]}"
do
echo "key :" $i
echo "value:" ${results_map[$i]}
done
由于您不再需要变量分配,您甚至可以在远程命令中省略if ...
and 。exit
if ssh $serverName << EOF
[ -f /app/Release/abc.war ]
EOF
then
...
您使用heredoc的方法
ssh hostname <<EOF
# commands ...
EOF
缺点是您在远程系统上运行交互式 shell,它可能会在执行命令之前打印一些系统信息或欢迎消息。您可以通过将命令或脚本指定为ssh
.
if ssh $serverName [ -f /app/Release/abc.war ]
then
...
如果您的命令序列较长,您可以在远程系统上创建一个脚本并以与ssh hostname scriptname
. ssh
您还可以使用或在远程系统上创建脚本scp
。
推荐阅读
- c# - 如何在mysql中获得一个自动递增的存储过程
- java - 为什么实体管理器在 Spring Boot 测试父级中不为空,但在存储库中为空?
- jasmine - 茉莉花测试通过调用 spyOn 模拟函数
- javascript - React native 中没有定义函数
- sql-server - 创建触发器以在添加新员工时更新部门的总工资
- r - 在 R 表达式中放大单个符号 (/)
- java - ArrayDeque 实现为数组,为什么不是 Random Access?
- r - 在闪亮的服务器上发布时无法加载数据集
- office365 - 如何通过 Graph API 在 MS Teams 中安排会议
- javascript - 在访问组件时需要帮助