В одном скрипте Dragon Knight нашел вот это:
:local key ([:terminal inkey] - 48)
Такая команда будет работать только в терминале ? Из скрипта нельзя сделать ввод символа с клавиатуры ?
Как работает команда
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
-
- Сообщения: 1657
- Зарегистрирован: 15 сен 2017, 09:03
- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Давайте рассуждать. :terminal inkey используется при интерактивном диалоге. Например :local key [:terminal inkey] будет ожидать нажатия клавиши и сохранит её ASCII представление в переменную key. Для y это будет 121, для n будет 110. Как это использовать в скрипте, который выполняется в фоне?
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-
- Сообщения: 1657
- Зарегистрирован: 15 сен 2017, 09:03
Не понял совсем ничего. Кроме того, что да, в скрипте, это вероятно вообще никак использовать нельзя.
А в терминале пробовал - странная вещь выходит (с моей точки зрения):
Например,
:put "enter a character using the keyboard"
:local key ([:terminal inkey]-48)
:put $key
:put [:typeof $key]
Почему, выполняясь из терминала программа не ждет ввода с клавиатуры и не печатает на экран ни код введенного символа ни тип переменной $key ?
А в терминале пробовал - странная вещь выходит (с моей точки зрения):
Например,
:put "enter a character using the keyboard"
:local key ([:terminal inkey]-48)
:put $key
:put [:typeof $key]
Почему, выполняясь из терминала программа не ждет ввода с клавиатуры и не печатает на экран ни код введенного символа ни тип переменной $key ?
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Это я сейчас не понял. Раскладка клавиатуры английская.
Нажимаем Enter
Я опять нажал Enter, так как терминал оказался в режиме ожидания
Что, по вашему, другое должно было случиться? Может вы перед этим с терминале нажимали Ctrl+v ?
Код: Выделить всё
[podarok66@RB750Gr3] > {{:put "enter a character using the keyboard"
{{... :local key ([:terminal inkey]-48)
{{... :put $key
{{... :put [:typeof $key]}}
Код: Выделить всё
enter a character using the keyboard
Код: Выделить всё
-35
num
[podarok66@RB750Gr3] >
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-
- Сообщения: 1657
- Зарегистрирован: 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]}
Поэтому никакого ожидания нажатия на клавишу не происходило. Кстати почему так ?
Так и не понял почему блок кода для выполнения в терминале правильно заключать в фигурные скобки ?
У меня вот этот код не был заключен в фигурные скобки как у Вас
: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
viewtopic.php?f=14&t=13947
- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Насколько я понимаю, если не заключать код в фигурные скобки, то каждая команда завершается либо ; либо символом новой строки. Если заключить какой либо код в фигурные скобки, получаем локальную область, которая определяет свои переменные, не видные за скобками, но включает переменные, которые были определены на порядок выше. Все команды в такой области должны быть выполнены, так как рассматриваются системой, как одна строка. Верно и обратное: каждая строка, записанная в терминале, рассматривается как локальная область видимости. Поэтому вставляя в Терминал код из нескольких строк, получаем, что каждая строка определена лишь для себя самой и не определена для всех остальных.
Фух... Сумбурно, но я никогда не был силён в теоретезировании.
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-
- Сообщения: 1657
- Зарегистрирован: 15 сен 2017, 09:03
Спасибо, не сумбурно, а очень нормально. Согласно Вашему последнему предложению (обратное утверждение) - это что же получается, что если код исполняемый в терминале не заключен в фигурные скобки например, состоит из нескольких строк, в одной строке допустим определяется переменная, а вторая строка про неё уже ничего не знает ? Вот здорово ! Значит нужно всё что для терминала заключать в фигурные скобки !
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Ну да, так оно и есть. Вот простейший эксперимент:
Как мы видим, переменная t оказывается необъявленной во второй строке. Несмотря на то, что в первой мы её объявляли. Как-то так 
Код: Выделить всё
[podarok66@RB750Gr3] > :local t "Hello"
[podarok66@RB750Gr3] > :put $t
[podarok66@RB750Gr3] >

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