Não escreva scripts bash como você escreveria código C (nem vice-versa).
cmd |\
while IFS= read -r line
do
...
done
Peça desculpas pelo título longo.
Eu tenho um comando que terá várias linhas como saída. Vou precisar usar cada linha como uma fonte para outro comando para processá-lo. Eu estou tentando atribuir uma variável e loop através dele, mas ele falha
Aqui está a saída da linha de comando
r_mqsc -m ABCD -r "DIS CHL(*) WHERE(SSLCIPH EQ TLS_RSA_WITH_AES_256_CBC_SHA)" -l |awk '/Connected/,0'|grep -v Connected |awk -F'SSLCIPH' '{print $1}'
CHANNEL(TO.MQ95XCAT02.SSL) CHLTYPE(CLUSRCVR)
CHANNEL(TO.MQ95XRB01.SSL) CHLTYPE(CLUSSDR)
CHANNEL(TO.MQ95XRC01.SSL) CHLTYPE(CLUSSDR)
CHANNEL(TO.MQ95XRL01.SSL) CHLTYPE(CLUSSDR)
CHANNEL(TO.MQ95XRN01.SSL) CHLTYPE(CLUSSDR)
CHANNEL(TO.XA.MQ95XCAT02.SSL) CHLTYPE(CLUSRCVR)
CHANNEL(TO.XB.MQ95XCAT02.SSL) CHLTYPE(CLUSRCVR)
CHANNEL(TO.XN.MQ95XCAT02.SSL) CHLTYPE(CLUSRCVR)
Agora, cada uma dessas linhas (linha completa como está) precisa ser inserida em outro comando
como este
r_mqsc -m ABCD -r "ALTER $VARIABLE SSLCIPH('123_ABC_XYZ')" -l
Aqui está meu script, que está falhando
_chl="$(r_mqsc -m MQ95XCAT02 -r "DIS CHL(*) WHERE(SSLCIPH EQ TLS_RSA_WITH_AES_256_CBC_SHA)" -l |awk '/Connected/,0'|grep -v Connected |awk -F'SSLCIPH' '{print $1}')"
chlcnt=$(r_mqsc -m MQ95XCAT02 -r "DIS CHL(*) WHERE(SSLCIPH EQ TLS_RSA_WITH_AES_256_CBC_SHA)" -l |awk '/Connected/,0'|grep -v Connected |awk -F'SSLCIPH' '{print $1}'|wc -l)
echo "$_chl"
set -A strqmgrs ${_chl}
i=$chlcnt
arrayindex=0
while [ i -ne 0 ]
do
chl=${strqmgrs[$arrayindex]}
r_mqsc -m MQ95XCAT02 -r "ALTER $chl SSLCIPH('TLS_RSA_WITH_AES_256_CBC_SHA256')" -l
i=$((i-1))
arrayindex=$((arrayindex+1))
done
a variável $ chl está saindo assim
ALTER CHLTYPE
- > note que está apenas tomando a palavra CHLTYPE na linha de saída real, mas não na linha inteira.
Não escreva scripts bash como você escreveria código C (nem vice-versa).
cmd |\
while IFS= read -r line
do
...
done
se você precisa manter as variáveis configuradas no loop, faça assim:
while read -r line
do
stuff
done < <( **command-line** )