Как работает команда

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

В одном скрипте Dragon Knight нашел вот это:

:local key ([:terminal inkey] - 48)

Такая команда будет работать только в терминале ? Из скрипта нельзя сделать ввод символа с клавиатуры ?


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4360
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Давайте рассуждать. :terminal inkey используется при интерактивном диалоге. Например :local key [:terminal inkey] будет ожидать нажатия клавиши и сохранит её ASCII представление в переменную key. Для y это будет 121, для n будет 110. Как это использовать в скрипте, который выполняется в фоне?


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Не понял совсем ничего. Кроме того, что да, в скрипте, это вероятно вообще никак использовать нельзя.
А в терминале пробовал - странная вещь выходит (с моей точки зрения):

Например,

:put "enter a character using the keyboard"
:local key ([:terminal inkey]-48)
:put $key
:put [:typeof $key]

Почему, выполняясь из терминала программа не ждет ввода с клавиатуры и не печатает на экран ни код введенного символа ни тип переменной $key ?


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4360
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Это я сейчас не понял. Раскладка клавиатуры английская.

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

[podarok66@RB750Gr3] > {{:put "enter a character using the keyboard"
{{... :local key ([:terminal inkey]-48)                             
{{... :put $key                        
{{... :put [:typeof $key]}}
Нажимаем Enter

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

enter a character using the keyboard
Я опять нажал Enter, так как терминал оказался в режиме ожидания

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

-35
num
[podarok66@RB750Gr3] > 
Что, по вашему, другое должно было случиться? Может вы перед этим с терминале нажимали Ctrl+v ?


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Да, работает.
У меня вот этот код не был заключен в фигурные скобки как у Вас

:put "enter a character using the keyboard"
:local key ([:terminal inkey]-48)
:put $key
:put [:typeof $key]

{:put "enter a character using the keyboard"
:local key ([:terminal inkey]-48)
:put $key
:put [:typeof $key]}

Поэтому никакого ожидания нажатия на клавишу не происходило. Кстати почему так ?
Так и не понял почему блок кода для выполнения в терминале правильно заключать в фигурные скобки ?


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4360
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Sertik писал(а): 09 июн 2020, 10:21 Так и не понял почему блок кода для выполнения в терминале правильно заключать в фигурные скобки ?
Насколько я понимаю, если не заключать код в фигурные скобки, то каждая команда завершается либо ; либо символом новой строки. Если заключить какой либо код в фигурные скобки, получаем локальную область, которая определяет свои переменные, не видные за скобками, но включает переменные, которые были определены на порядок выше. Все команды в такой области должны быть выполнены, так как рассматриваются системой, как одна строка. Верно и обратное: каждая строка, записанная в терминале, рассматривается как локальная область видимости. Поэтому вставляя в Терминал код из нескольких строк, получаем, что каждая строка определена лишь для себя самой и не определена для всех остальных.
Фух... Сумбурно, но я никогда не был силён в теоретезировании.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Спасибо, не сумбурно, а очень нормально. Согласно Вашему последнему предложению (обратное утверждение) - это что же получается, что если код исполняемый в терминале не заключен в фигурные скобки например, состоит из нескольких строк, в одной строке допустим определяется переменная, а вторая строка про неё уже ничего не знает ? Вот здорово ! Значит нужно всё что для терминала заключать в фигурные скобки !


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4360
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Ну да, так оно и есть. Вот простейший эксперимент:

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

[podarok66@RB750Gr3] > :local t "Hello"
[podarok66@RB750Gr3] > :put $t

[podarok66@RB750Gr3] > 
Как мы видим, переменная t оказывается необъявленной во второй строке. Несмотря на то, что в первой мы её объявляли. Как-то так :ne_vi_del:


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Ответить