Shell 如何在远程服务器内设置变量值
在远程服务器内部,我有一个条件语句 状态值应设置为成功 但在这里,当我打印状态变量时,我总是得到失败响应 地位"成功",Shell 如何在远程服务器内设置变量值,shell,unix,Shell,Unix,在远程服务器内部,我有一个条件语句 状态值应设置为成功 但在这里,当我打印状态变量时,我总是得到失败响应 地位"成功", status='Success' # !/bin/bash declare -a server_PP=('XXXXX' 'YYYYYYY' ); declare -A results_map; function process(){ serverList=$1[@]; servers=("${!serverList}"); status='Failure'; for
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
#/bin/bash
声明-a服务器_PP=('XXXXX''yyyyyy');
声明-结果映射;
函数过程(){
服务器列表=$1[@];
服务器=(“${!serverList}”);
状态为“失败”;
对于“${servers[@]}”中的serverName
做
ssh$serverName正如pcarter的注释中所述,两个系统上的变量彼此独立,不通过ssh
传递。而不是设置变量(或打印和读取注释中建议的值,这是一个有效的解决方案)您可以使用退出代码,退出代码通过ssh
自动传递
if ssh $serverName [ -f /app/Release/abc.war ]
then
...
以下脚本与原始脚本非常接近。有关进一步的改进,请参阅下文
# !/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
您使用heredoc作为
ssh hostname <<EOF
# commands ...
EOF
如果您的命令序列更长,您可以在远程系统上创建脚本,并以与ssh hostname scriptname
相同的方式运行此脚本。您也可以使用ssh
或scp
在远程系统上创建脚本。您正在使用ssh在服务器上运行远程shell脚本变量完全独立于本地运行的shell脚本中的变量。设置一个变量对另一个变量没有影响。您需要在远程脚本中打印结果,本地脚本可以读取和解释输出以在本地设置值。(注意,您可以将调试语句打印到stderr,这样它们就不会干扰打印到stdout的结果。)使用退出代码是一种比我建议的简单得多的方法。谢谢。
if ssh $serverName [ -f /app/Release/abc.war ]
then
...