Функция не работает, а то-же самое в терминале работает.

Обсуждение ПО и его настройки
Ответить
Lurker
Сообщения: 159
Зарегистрирован: 29 апр 2021, 10:45

Добрый день. ROS 6.48.2
Есть объявленные функции

Код: Выделить всё

#address-list to ip
global ALtoIP do={
set $1 [ip firewall address-list print as-value where list=$1]
set $1 [tostr $1]
local start [find $1 "address="]
local end [find $1 ";comment="]
set $1 [pick [tostr $1] ($start+8) ($end)]
set $1  [toip $1]
#put ([typeof $1] . "="  . $1)
return $1
}

global IPtoMAC do={
set $1 [ip dhcp-server lease print as-value where active-address=$1]
set $1 [tostr $1]
local start [find $1 "mac-address="]
local end [find $1 ";server="]
set $1 [pick [tostr $1] ($start+12) ($end)]
#put ("mac=" . $1)
return $1
}

global WAKEonLAN do={
tool wol [$IPtoMAC [$ALtoIP "PC_wakeup"]]
}
Вот так ругается
@MikroTik] > $WAKEonLAN
invalid value of mac, mac address required

хотя MAC там передаётся
@MikroTik] > put [$IPtoMAC [$ALtoIP "PC_wakeup"]]
B4:2E:99:91:A2:7E

И при выполнении в командной строке не ругается(работает или нет неизвестно т.к. на компе wake on lan ещё не включен)
@MikroTik] > tool wol [$IPtoMAC [$ALtoIP "PC_wakeup"]]

[***@MikroTik] >


Lurker
Сообщения: 159
Зарегистрирован: 29 апр 2021, 10:45

Пока тыкаюсь с нулевым результатом. Такое ощущение что в скриптах нельзя использовать свои функции, а в терминале можно.


Lurker
Сообщения: 159
Зарегистрирован: 29 апр 2021, 10:45

разобрался.
пример из мануала
Note: to call another function its name needs to be declared (the same as for variables)


:global funcA do={ :return 5 }
:global funcB do={
:global funcA; <-- вот этого объявления функции у меня нехватало
:return ([$funcA] + 4)
}
:put [$funcB]


Ответить