O <<$Output
no script é interpretado como o início de um documento aqui.
Geralmente um documento aqui é escrito como, por exemplo,
cat <<END_OF_INPUT
.
.
.
.
END_OF_INPUT
... mas é totalmente legal usar $Output
ou qualquer outra string como delimitador de documento aqui.
Você provavelmente pretendia usar <$Output
, mas isso também estaria errado, pois isso seria uma tentativa de ler o arquivo $Output
, que não é um nome de arquivo, mas a saída do seu pipeline. / p>
Tente colocar a saída no loop while, como você fez na linha de comando:
#!/bin/bash
snmpwalk -m /usr/share/snmp/mibs/CISCO-UNIFIED-COMPUTING-STORAGE-MIB.my \
-v2c -c opennms-Priv X.X.X.X .1.3.6.1.4.1.9.9.719.1.45.4.1.18 2>/dev/null |
awk '{print $4}' |
while read -r line; do
echo "Drive $line"
done
Eu costumo usar printf
em vez de echo
quando a saída precisa conter dados fornecidos pelo usuário (quaisquer dados vindos de fora do script, na verdade):
printf 'Drive %s\n' "$line"
Veja " Por que o printf é melhor que o eco? "
Atualizado:
Se sua saída precisa parecer
Drive1 online(1)
Drive2 online(1)
... etc.
com o número após Drive
sendo estritamente incrementado em um para cada linha, então você precisa de um contador no loop:
while read -r line; do
printf 'Drive%d %s\n' "$(( ++count ))" "$line"
done