Код: Выделить всё
:local EnterString do={
:local cont; :local string
:while ($cont!=13) do={
:if ([:len $string]<254) do={
:local key ([:terminal inkey])
:if ($key!=13) do={
:local char [[:parse "(\"\\$[:pick "0123456789ABCDEF" (($key >> 4) & 0xF)]$[:pick "0123456789ABCDEF" ($key & 0xF)]\")"]]
:set string ("$string"."$char")}
:set cont $key
}
}
:return $string}
Её можно дополнить разными плюшками с моментальной проверкой вводимых символов, ограничивать длину формируемой строки и .т.д...
Но, если нужно проще и быстрее можно использовать такую фичу: https://forum.mikrotik.com/viewtopic.php?t=135112
Код: Выделить всё
:local input do={:put $1; :return;}
:local login [$input "Enter login:"]
:local password [$input "Enter password:"]
:put "Login is [$login] and password is [$password]"
Enter login
value: admin
Enter password
value: test
Login is [admin] and password is [test]
Фишка в том, что пустой :return из Терминала всегда предлагает ввести значение. Окончанием ввода обязательно служит клавиша "Enter".Единственным неудобством будет вывод слова "value:" в качестве приглашения перед вводом, но если это не раздражает, то всё нормально работает.
Удобно использовать из интерактивных скриптов настройки конфигураций и т.д...
В Роутер ОС 7.11 появилась ещё одна возможность - использование :terminal ask. Эта новая команда лишена неудобства, связанного с выводом приглашения ко вводу значения :value. Окончанием ввода также обязательно служит клавиша "Enter".
Код: Выделить всё
:global Answer [:terminal/ask "Do you agree to use Router OS 7?"]
:put $Answer

Код: Выделить всё
{
:global Answer []
:while ($Answer!="yes") do={
:set Answer [:terminal/ask "Do you agree to use Router OS 7?"]
}
}
Код: Выделить всё
:global userinput [/terminal/ask preinput="preinput>" prompt="Some text that in prompt"]