Не уверен сюда или в админ нужно было это написать, но..
Есть небольшой скриптик, заходящий на D-Link, смотрящий соседа (по lldp), и подписывающий порт если рядом кто то есть.
В принципе работает, но если на порту нет соседа, либо порта нет вовсе - ждет секунду пока не отвалится по таймауту. Время зря теряет (если участь что коммутаторов будет больше 100 - это вечность). Нормальной документации на empty не нашел :(
Есть ли более изящный способ обработки вывода, чем парсить логи?
Можно ли поправить, так что бы ждал не один, а несколько вариантов? что то вроде:
empty -w -v -i $fifo_out -o $fifo_in -t 1 Entry;None;completions q
telnet="telnet"
target="10.0.0.1"
login="admin"
password="password!"
fifo_in="/tmp/empty.in"
fifo_out="/tmp/empty.out"
telnet_cmd="$telnet $target"
tmp="/tmp/empty.tmp"
killall empty
empty -f -i $fifo_in -o $fifo_out -L $tmp $telnet_cmd
if [ $? = 0 ]; then
if [ -w $fifo_in -a -r $fifo_out ]; then
empty -w -v -i $fifo_out -o $fifo_in -t 5 ame "$login\n"
empty -w -v -i $fifo_out -o $fifo_in -t 5 "qwerrtry" "qwqwqw" ord "$password\n"
empty -w -v -i $fifo_out -o $fifo_in -t 1 "#"
for N in {1..28}
do
empty -s -o $fifo_in "sh lldp r $N\n"
empty -w -v -i $fifo_out -o $fifo_in -t 1 Entry q
empty -s -o $fifo_in "\n"
empty -w -v -i $fifo_out -o $fifo_in -t 1 "#"
desc=`cat $tmp | grep "System Name" | awk '{print $5}'`
if [ -n "$desc" ]
then
empty -s -o $fifo_in "conf ports $N desc LINK_TO_${desc}\n"
fi
echo > $tmp
done
empty -s -o $fifo_in 'logout\n'
rm -f $tmp
else
echo "Error: Can't find I/O fifos!"
return 1
fi
else
echo "Error: Can't start empty in daemon mode"
return 1
fi
admin#sh lldp r 28
Command: show lldp remote_ports
Next possible completions:
{} <portlist> mode
admin#sh lldp r 20
Command: show lldp remote_ports 20
Port ID : 20
-------------------------------------------------------------------------------
Remote Entities Count : 0
(None)