Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何在远程服务器内设置变量值_Shell_Unix - Fatal编程技术网

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
...