Страница 1 из 1

Переменная global

Добавлено: 26 окт 2017, 10:38
mcheev
Добрый день!
Пытаюсь учиться писать свои скрипты, для домашних целей, но столкнулся с переменной global, логику которой не могу понять.
Искал информацию в интернете, но видимо мои кривые слова для поиска в Google не принесли результата.

Из найденной информации:
Язык допускает два типа переменных, глобальные и локальные.

global - доступно из всех скриптов, созданных текущим пользователем.
local - доступно только внутри текущей области видимости.

Собственное есть скрипт, в котором задаю переменные global и local
:global poolID "xxxxxxxxxxxxxxxxxxxxx" ;
:global myID "xxxxxxxxx" ;

:tool fetch url=("http://xxxxxxxxx.ru/".$poolID."/update\?you_id=".$myID."&count=1000.") keep-result=no ;
Это не весь скрипт конечно, но он в итоге отправляет значение.

Далее я делаю другой скрипт (отдельный), вставляю в него строчку:
:tool fetch url=("http://xxxxxxxxx.ru/".$poolID."/update\?you_id=".$myID."&count=1001.") keep-result=no ;
Но он уже не может получить значения global и соответственно ничего не отправляется, если эту же строчку выполнить в терминале, то она срабатывает.

Подскажите пожалуйста, это вообще возможно, правда ли что глобальные переменные передаются во все скрипты созданные пользователем или быть может их в другом скрипте сначала нужно как-то хитро вызвать.

Re: Переменная global

Добавлено: 26 окт 2017, 13:35
Erik_U
Вроде "глобал" они работают для скриптов, вызванных из того, где были объявлены?

Re: Переменная global

Добавлено: 26 окт 2017, 14:26
mcheev
Erik_U писал(а):Вроде "глобал" они работают для скриптов, вызванных из того, где были объявлены?

Так вот и хочется понять, так как информация в интернете разница, кто-то пишет, что во всех скриптах, кто-то пишет только в том, в котором создана, но в любом месте.
Просто странно, почему бы не использовать глобальную переменную во всех скриптах, если она доступна из терминала и видна по команде environment print. Лично мне думается, что ее нужно как-то по особому указать, но как я не нашел.

Re: Переменная global

Добавлено: 26 окт 2017, 15:20
vqd
первый скрипт

{
:global test "Hello world!"
:put $test
}

result
Hello world!

Второй скрипт (первый выполнялся ранее)
{
:global test
:put $test
}

result
Hello world!

Re: Переменная global

Добавлено: 07 апр 2020, 02:12
Jav
Тоже столкнулся с этим вопросом и поиск первым делом выдал этот пост. Но все равно разобрался не сразу. Поэтому уточню ответ (для будущих поколений):

Что бы глобальная переменная сохранилась необходимо в скрипте 1 установить галочку в Policy "policy" (см. картинку). Тогда, после запуска первого скрипта на закладке System/Scripts/Environment появится строчка с Вашей глобальной переменной.
Аналогично и во втором скрипте надо поставить галочку, что бы считать эту глобальную переменную.
Изображение

Re: Переменная global

Добавлено: 24 май 2020, 00:56
hulitolku
У меня другая проблема.
Почему в терминале работает:

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

:global dbm [/interface wireless registration-table get value-name=signal-strength 0 ]
А в скрипте переменная не присваивается?
Policy стоит.

Re: Переменная global

Добавлено: 24 май 2020, 16:19
podarok66
После get открываем скобку и вбиваем строку поиска по признаку, например по МАС.

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

:global dbm [/interface wireless registration-table get [ find mac-address=xx:xx:xx:xx:xx:xx] value-name=signal-strength]
По номеру не получится, он для системы величина не постоянная и определяется каждый раз по новой.

Re: Переменная global

Добавлено: 21 фев 2022, 10:10
aleksey.perminov
У кого в скрипте не видит глобальную переменную объявленную не в скрипте,
то просто объявите ее в скрипте без присваивания ":global VarName;",
и все! будет видеть! у меня так прокатило!
по ходу это сделали для безопасности.

Re: Переменная global

Добавлено: 12 авг 2022, 14:48
G-Tiger
aleksey.perminov писал(а): 21 фев 2022, 10:10 У кого в скрипте не видит глобальную переменную объявленную не в скрипте,
то просто объявите ее в скрипте без присваивания ":global VarName;",
Не прокатило. Переменная объявляется при старте микротика (шедуллер запускает скрипт, в котором указано вот такое - :global MyFault "0"; ). Потом эта переменная должна использоваться в 2 скриптах, которые запускает Netwatch. И при таком запуске скриптов - прочесть переменную не получается. Если запустить скрипт вручную - всё работает. Я слышал, что Netwatch покоцали. Может это оно? Версия прошивки 6.49.2.