Вытащить переменную из :do

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
cliff
Сообщения: 2
Зарегистрирован: 01 ноя 2022, 10:26

Добрый день, подскажите, как вытащить переменную, чтоб в дальнейшем ее использовать.
Есть конструкция такого вида внутри скрипта

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

:do {
:local ispip [/ip address get [find interface=$ispinter] address];
} on-error={
:local ispip "0.0.0.0/0";
}
Но за пределы этого :do переменная $ispip не попадает, и в скрипте, в дальнейшем, ее использовать не получится.

Мне необходимо записать IP адрес в переменную $ispip, если же по любой причине адрес получить не удалось (интерфейс упал, dhcp не выдал итд), переменная должна принять вид "0.0.0.0/0", а скрипт продолжиться выполняться.
Есть очевидные варианты в виде использования :global, либо записи в файл нужных данных, но хочется не выходить за пределы скрипта, потому что на одном устройстве подобных скриптов будет висеть несколько, и сочинять новые переменные под каждый скрипт не хочется.
Если так не получится, может быть кому-нибудь придет в голову, как иначе решить задачу? А то уже взгляд замылился.


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

:local ispip

:do {
:set ispip [/ip address get [find interface=$ispinter] address];
} on-error={
:set ispip "0.0.0.0/0";
}


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
-13-
Сообщения: 124
Зарегистрирован: 18 мар 2021, 12:45

можно и не объявлять а сразу сделать :-):

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

:do {
:set $ispip [/ip address get [find interface=$ispinter] address];
} on-error={
:set $ispip "0.0.0.0/0";
}


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Но лучше всё же переменные объявлять, а то войдет в нехорошую привычку, а потом можно наступить на грабли :-)


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
-13-
Сообщения: 124
Зарегистрирован: 18 мар 2021, 12:45

Sertik писал(а): 01 ноя 2022, 13:31 Но лучше всё же переменные объявлять, а то войдет в нехорошую привычку, а потом можно наступить на грабли :-)
А что за грабли, в чем выражается? Давно уже так делаю, пока проблем не было


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

с глобальными тоже так поступаете ?
а с массивами ?


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
-13-
Сообщения: 124
Зарегистрирован: 18 мар 2021, 12:45

Sertik писал(а): 01 ноя 2022, 14:46 с глобальными тоже так поступаете ?
а с массивами ?
глобальные объявляю через :global Name "tulula", но я их не люблю и стараюсь не использовать, на сегодня обхожусь двумя-тремя
массивы также через :set $array1


cliff
Сообщения: 2
Зарегистрирован: 01 ноя 2022, 10:26

Большое спасибо. Не ожидал, что важно, где переменная объявлена.


Ответить