Korn shell 和 Bash 通过 SSH 用空格替换变量

Korn shell 和 Bash 通过 SSH 用空格替换变量

我一直尝试通过 SSH 从 AIX 服务器(Korn Shell)到 IBM HMC(受限 Bash Shell)执行远程命令来收集 LPAR id 详细信息。

我在通过 SSH 将 lpar 名称替换为空格时遇到问题。

以下是框架中的服务器总数。您能帮我解决用 SSH 上的变量 LPAR 替换 HMC 的问题吗

vio1001
vio1002
lpar4556 PROD DBX02

尝试过的脚本:

oldIFS=$IFS
IFS=$'\n'
set -o noglob
for lpar in $(ssh -nq hscroot@ibmhmc101 "lssyscfg -r lpar -m frame220-aix-p750 -F name,lpar_env" | cut -d, -f 1 | sort)
do
   echo "$lpar"
   for state in $(ssh -nq hscroot@ibmhmc101 "oldIFS=$IFS; IFS=$'\n';set -o noglob;lssyscfg -m frame220-aix-p750 -r lpar -F name:state --filter lpar_names="${lpar}" << "EOF"
EOF" | cut -d: -f2)
   do
      echo $state
   done
done

Error: 
vio1001
vio1002
lpar4556 PROD DBX02
/bin/bash: line 1: vio1001: command not found
/bin/bash: line 2: vio1002: command not found

Ru

i
g

答案1

你需要保护勒帕所以我会添加\在每个双引号之前

这是一个测试两者的示例:

for lpar in "1"  "2 3" "2;3" "abc" "abc def" "abc;def"   ; 
do 
     echo "#${lpar}#" ;
     ssh [email protected]  "printf 'arg1:%s arg2:%s\n'  --filter  par_names=\"${lpar}\"  " ;
     ssh [email protected]  "printf 'arg1:%s arg2:%s\n'  --filter  par_names="${lpar}"  " ;
done 

答案2

使用 while read 行尝试了以下解决方法。这解决了我的问题。

ssh hscroot@$hmc "lssyscfg -r lpar -m $frame -F name,lpar_env" | cut -d, -f1 | sort | while read line
do
lpar=`echo ${line} | cut -d= -f2`
echo "$lpar"
for lpar_id in $(ssh -nq hscroot@$hmc "lssyscfg -r lpar -m $frame -F name:lpar_env:lpar_id --filter lpar_names="${lpar}" " | cut -d: -f3 | sort)
do
echo "$lpar_id"
done
done

相关内容