Bash
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
使用 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
你需要保護lpar所以我會在每個雙引號之前添加****
這是一個例子,測試兩者:
for lpar in "1" "2 3" "2;3" "abc" "abc def" "abc;def" ; do echo "#${lpar}#" ; ssh XXXX@EXAMPLE.COM "printf 'arg1:%s arg2:%s\n' --filter par_names=\"${lpar}\" " ; ssh XXXX@EXAMPLE.COM "printf 'arg1:%s arg2:%s\n' --filter par_names="${lpar}" " ; done