LINUX.ORG.RU
решено ФорумAdmin

Перенаправление stderr в файл в условиях

 ,


1

1

Доброго времени суток всем. Пишу скрипт для опроса коммутаторов на предмет прошивки, и последующего их обновления. Структура скрипта: скрипт А:

 #!/bin/bash
       
       . ./snmpFunctions
       
       while read LINE
       do
       snmpCheckFirmwareActuality $LINE $1 $2
       done < ./networks_for_scan/list_networks
       echo -e "\n\n\n"
       echo -e "Итого:"
       echo -e "Нуждаются в обновлении: $oldFirmwareCount\n"
       echo -e "Имеют актуальное ПО: $actualFirmwareCount\n"

Где $1 - модель коммутатора, $2 - актуальная прошивка, list_networks - текстовый файл с именами файлов с IP адресами(да-да, но подругому никак,нужно было разграничить сеть по районам)
Скрипт В:
#!/bin/bash
       
       cP=public # communityPhrase
       counter=0
       actualFirmwareCount=0
       oldFirmwareCount=0
       
       snmpGetSysModel()
       {
          model=$(snmpget -v 2c -c $cP -m ALL $1 1.3.6.1.2.1.1.1.0)
          modelConverted=$(awk -F ": " 'NR=1{print $2}' <<< $model | awk '{if ($1=="D-Link") print $2; else print $1}')
      }
snmpCheckFirmwareActuality().
      {
      2>>err
      while read LINE
      do
      snmpGetSysModel $LINE
      if [[ $modelConverted == $2 ]]; then
      switchFirmware=$(snmpget -v 2c -c $cP -m ALL $LINE 1.3.6.1.4.1.171.12.1.2.7.1.2.1 2>>err)
      fi
      done < $1
      }
Я хочу чтобы список всех устройств которые не опросились складывался в файл err.
Но скрипт не отрабатывает так я хочу, ошибки выводятся на экран.
Если я комментирую условие и оставляю только 
switchFirmware=$(snmpget -v 2c -c $cP -m ALL $LINE 1.3.6.1.4.1.171.12.1.2.7.1.2.1 2>>err)

Ошибки складываются и в файл и на экран( что мне кстати на руку, но хотелось бы понять почему работает так, ведь должно писать только в файл)

Почитай какой-нибудь туториал по баш чтоли. >> пишет stdout в файл. Чтобы записывать и stderr тоже надо сделать 2>&1 помимо этого. При этом когда оно пишется в файл, оно не запишется у тебя в переменную switchFirmware, тебе нужна команда tee

pawnhearts ★★★★★
()

Если я комментирую условие и оставляю только
if [[ $modelConverted == $2 ]]; then

Здесь переменная $modelConverted всегда пустая, у нее нет значения.

ошибки выводятся на экран

Скорее всего это вывод из вашей функции snmpGetSysModel в которой вызывается snmpget

anc ★★★★★
()
Ответ на: комментарий от pawnhearts

Почитай какой-нибудь туториал по баш чтоли. >> пишет stdout в файл.

У ТС 2>>err перенаправление strerr, а не >>err. Так что все верно.

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.