Acessando elementos de array dentro da bash de substituição de processo

0

Eu tenho um arquivo de texto com esta aparência:

b4238ca2-cb8d-11e4-8731-1681e6b88ec1,https,username,password,ipaddress    
b4238f0e-cb8d-11e4-8731-1681e6b88ec1,https,username,password,ipaddress
b4239058-cb8d-11e4-8731-1681e6b88ec1,https,username,password,ipaddress

OBSERVAÇÃO: o nome de usuário, a senha e o endereço IP foram todos alterados, para não expor informações confidenciais, eles são reais no meu arquivo de texto que estou usando.

Eu escrevi o seguinte script bash para ler linha por linha e colocar cada item em uma matriz. Anteriormente isso funcionava, no entanto, agora ele está dentro de uma substituição de processo, não está mais funcionando. Estou assumindo que isso tem a ver com o modo como estou acessando os elementos da matriz, mas não tenho certeza do que está errado. Snippet abaixo:

i=0
declare -a devices

while read line
do
    devices[i]=$line
    ((i++))
done < test_data.txt
timestamp=$(date +"%s")
echo "${devices[@]}"
IFS=","
declare -a devarr
for device in "${devices[@]}"
do
    devarr=($device)
    read dateStrNew dateStrOld < <(curl -k -q "${devarr[1]}://${devarr[2]}:${devarr[3]}@${devarr[4]}/camerainfo" | html2text |     gawk '/Newest Sequence/ { new=$3" "$4 }/Oldest Sequence/ {old=$3" "$4}END {OFS=","; print new,old }')

Além disso, eu tentei o seguinte com base em um combo de algum código alternativo que foi sugerido para uma pergunta anterior, junto com algum outro código que eu encontrei enquanto pesquisava, mas também não funciona. No entanto, simplificaria massivamente as coisas se isso acontecesse. Isso poderia funcionar e é uma solução melhor?

while read -u 3 line
do
    read UUID protocol username passwd ip_address
    curl_call="${protocol}://${ip_address}:${username}@${passwd}/report"
    echo $curl_call

    read dateStrNew dateStrOld < <(curl -k -q "$curl_call" | html2text | gawk'/Newest Sequence/ { new=$3" "$4 }/Oldest Sequence/ {old=$3" "$4}END {OFS=",";print new,old }')

done 3< test_data.txt

Qualquer ajuda muito apreciada, como vai ser uma longa noite independentemente! Obrigado!

    
por jewfro 05.04.2015 / 12:01

1 resposta

1

Você entende a sintaxe simples?

while IFS=',' read -r UUID protocol username passwd ip_address
do
    curl_call="${protocol}://${username}:${passwd}@${ip_address}/report"
    echo $curl_call
done < test_data.txt
    
por 05.04.2015 / 13:22