Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    Как добавить цвет в вывод

    Как добавить цвет в вывод

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Как добавить цвет в вывод, RouterOS
     
    Cicer22
    Guest
    #1
    0
    02.09.2020 13:35:00
    можно ли добавить цвет в скрипты, как в bash? Например, я могу выполнить это в bash и получить красный вывод: echo "\033[0;31mЯ красный?" Но когда я пробую: :put "\033[0;31mЯ красный?" это не изменяет цвет.
     
     
     
    Amm0
    Guest
    #2
    0
    06.12.2021 17:41:00
    Нашел это некоторое время назад, но вчера отвлекся на “/terminal cuu”. Не знаю, поможет ли это, но ключ к использованию “colors” в /terminal, похоже, заключается в том, чтобы помещать их в фигурные скобки вместе с любыми операциями “:put”. Например, { [/terminal style error]; :put "error text"; } Эти элементы можно объединять внутри одного блока: { :put "\n"; [ /terminal style error ]; :put "error text"; [ /terminal style escaped ]; :put "escaped text"; :put "\n"; } Сложнее с операцией “cursor up”, [/terminal cuu]. Эта часть не совсем ясна, но то, что я обнаружил, это использование табуляций, А НЕ пробелов, позволяет каким-то образом “встраивать” цвета с использованием [/terminal cuu]: { :put "\n"; [ /terminal style error ]; :put "hello "; [ /terminal style syntax-meta ]; [ /terminal cuu ]; :put "\tworld"; [ /terminal style syntax-old ]; [ /terminal cuu ]; :put "\t\t!!!"; :put "\n"; } В основном, когда вы используете “/terminal cuu” (перемещение курсора вверх), это также начинает запись с начала строки. Но это “нейтрализует” автоматически добавленный перенос строки (\n) от операции :put “text”. Главный трюк состоит в том, что использование обратного слэша t “\t” в ваших строках :put позволяет избежать перезаписи предыдущих значений, как это происходит с “:put”. Табуляции занимают 8 символов, так что вы не можете сделать точное позиционирование, но близкое. В то время как пробел в начале строки, которая передается :put, перезапишет строку выше, табуляция этого не сделает. Я могу представить более сложный скрипт, который делает больше. Например, если начать с :put “\n\n…” (например, “количество строк”), затем отслеживать желаемую раскладку текста, используя массив в памяти (в 8-символьных “ячейках” для соответствия \t), чтобы перерисовать с нужным количеством “/terminal cuu” и нужным ":put “\t\t\t\t…”… Я не такой уж безумец, но я могу прищуриться и увидеть теоретически возможную мини-библиотеку курсоров UNIX.
     
     
     
    msatter
    Guest
    #3
    0
    06.12.2021 18:13:00
    Я не использовал табуляцию, а снова и снова писал строку при вводе каждой буквы, пока не подтвердил её нажатием Enter, переходя к следующей строке. У меня даже была возможность исправлять предыдущие записи с помощью клавиш курсора.
     
     
     
    Amm0
    Guest
    #4
    0
    06.12.2021 19:45:00
    Не пробовал это с вводом… Иногда я использую цветовую раскраску только для вывода, как быструю скрипт для монитора. То, что касается inkey, действительно очень умно, но мне просто нужно немного цветного текста в CLI для некоторых вещей. Я искал, есть ли уже функции, которые облегчают работу с «цветами», — нашел только этот пост. Подумал, что добавлю немного кода скрипта в качестве примера для цветного вывода для других, поскольку непонятно, как использовать /terminal, основываясь на помощи F1 (и документации нет). Вот как отображаются все различные «названия цветов» (такие как «/terminal style ambiguous», «syntax-meta» и т.д.) на экране с черным фоном: Основная цель — поделиться цветовой стороной /terminal style, так как у меня это заработало достаточно хорошо. В основном я использовал несколько «макросов» для своих ограниченных целей, чтобы упростить их использование: :global RED do={/terminal style error} :global BLUE do={/terminal style ambiguous} :global WHITE do={/terminal style "syntax-old"} :global blue do={/terminal style escaped} :global cyan do={/terminal style "varname-local"} :global red do={/terminal style varname} :global plain do={/terminal style "syntax-val"} :global yellow do={/terminal style "syntax-meta"} :global strong do={/terminal style "syntax-noterm"} :global nostyle do={/terminal style "none"} которые можно использовать так: { $red; :put "red"; $RED; :put "reversed red" }
     
     
     
    eworm
    Guest
    #5
    0
    08.12.2021 10:08:00
    Ах, не знал, что это существует... Но ты тоже можешь использовать escape последовательности. :put ("\1B[91mпривет \1B[93mмир \1B[96m!!!")
     
     
     
    Jotne
    Guest
    #6
    0
    08.12.2021 10:13:00
    Хороший улов. Это работает только в telnet/ssh. В терминале Winbox - нет. Стиль /terminal работает во всех терминалах.
     
     
     
    Amm0
    Guest
    #7
    0
    08.12.2021 12:00:00
    Похоже, это правда. Есть одно исключение, и оно имеет смысл: стили терминала Mikrotik исчезают, когда ты используешь ssh для выполнения одной команды, например: ssh user@mikrotik “import printcolors.rsc”. Цвета работают нормально, если ты входишь в оболочку RouterOS CLI через SSH, используя /terminal/style. Но эта логика может объяснить, почему @eworm ANSI исчезает, когда используется “:put”, так как происходит некоторая обработка строк :put для SSH. По сути, /terminal/style — это как “умная запись” тех же кодов ANSI без новой строки от :put — у ROS есть доступ к UNIX termcap, так что они знают больше о удаленном терминале, чем доступно в CLI-скрипте. Ключевое, что я понял, это то, что тестирование цветов в CLI было для меня важным: если не поместить /terminal/style в { кодовый блок } вместе с :put..., это не будет работать. Обрати внимание, если ты используешь команды “/terminal style” как отдельные команды (например, нажимая Enter после них)... Mikrotik сбросит цвета как часть INPUT-запроса. Например, вывод Mikrotik “admin@MIkroTik >” очистит стиль, который ты только что установил. Таким образом, кажется, что эти команды “ничего не делают” из CLI. Но это не так, просто нужен кодовый блок в CLI, например admin@MIkroTik > {/terminal style error; :put "red reversed test"; /terminal style none}
     
     
     
    Amm0
    Guest
    #8
    0
    08.12.2021 12:49:00
    Это может быть более полный пример... Что я не понял: /terminal/cuu Следующий код "перерисует" сетку, похожую на электронную таблицу, из случайных строк (которые выглядят как шестнадцатеричные). Он использует "/terminal/inkey timeout=1s" в цикле (вместо "while(true)"..."delay 1s"), что позволяет делать часть "нажмите любую клавишу для выхода". Но это можно использовать для создания настоящего "цикла событий" и перерисовки новых данных из других команд. Использование массива для хранения сетки было бы лучше. Но я хотел показать, как работают операторы /terminal, не заставляя кого-то знать синтаксис массива ROS. Вот GIF его работы: do {

    :local RED     do={/terminal style error}
    :local BLUE    do={/terminal style ambiguous}
    :local WHITE   do={/terminal style "syntax-old"}
    :local blue    do={/terminal style escaped}
    :local cyan    do={/terminal style "varname-local"}  
    :local red     do={/terminal style varname}
    :local plain   do={/terminal style "syntax-val"}
    :local yellow  do={/terminal style "syntax-meta"}  
    :local strong  do={/terminal style "syntax-noterm"}
    :local nostyle do={/terminal style "none"}

    :local rndhex do={ :return [:rndstr length=6 from=abcdef0123456789] }

    {                           :put {"  Нажмите "};
     $nostyle; /terminal/cuu;     :put        "\t    клавишу для выхода (или используйте Ctrl-C)";
     $RED; /terminal/cuu;         :put        "\tлюбую";
    }

    :local keypress 65535;

    while (keypress=65535) do={
       :local Nrows (9);
       
       for i from=1 to=$Nrows do={:put ""}
       for i from=1 to=$Nrows do={/terminal cuu}
       for i from=1 to=$Nrows do={$RED; :put "   A$i         "}
       for i from=1 to=$Nrows do={/terminal cuu}
       for i from=1 to=$Nrows do={$cyan; :put "\t $([$rndhex])"}
       for i from=1 to=$Nrows do={/terminal cuu}
       for i from=1 to=$Nrows do={$blue; :put "\t\t $([$rndhex])"}
       for i from=1 to=$Nrows do={/terminal cuu}
       for i from=1 to=$Nrows do={$yellow; :put "\t\t\t $([$rndhex])"}
       for i from=1 to=$Nrows do={/terminal cuu}
       for i from=1 to=$Nrows do={$WHITE; :put "\t\t\t\t   E$i   "}
       for i from=1 to=$Nrows do={/terminal cuu}
       
       :set keypress [/terminal inkey timeout=1s]
    }
    }
     
     
     
    Amm0
    Guest
    #9
    0
    20.02.2023 03:03:00
    Не знаю, поможет ли это кому-то, но я только что узнал новый способ имитировать команду UNIX “clear”. Есть код ANSI для этого, например, ANSI escape (“\1B”) и буква “c”, как в “byte string” routeros: :put "\1Bc". Подсказка остается внизу, а winbox/etc очищает терминал.
     
     
     
    rextended
    Guest
    #10
    0
    20.02.2023 08:16:00
    Uuuuuuuuuuu… неплохой улов!
     
     
     
    rextended
    Guest
    #11
    0
    20.02.2023 08:56:00
    Для симуляции этого в терминале winbox…: :put ("\1B[41mhello \1B[43mworld \1B[46m!!!\1B[0m") Для симуляции результата скриншота в посте #4: :put ("\1B[1;37m\1B[41mhello \1B[1;33m\1B[40mworld \1B[0;30m\1B[42m!!!\1B[0m")
     
     
     
    Amm0
    Guest
    #12
    0
    20.02.2023 14:09:00
    Обратите внимание: пример скрипта «случайная перезагрузка цвета» в посте #10 выше не работает с ~v7.4 до текущей v7.8rc2. Есть ошибка Mikrotik в /terminial/inkey, где timeout= больше не учитывается, поэтому /terminal/inkey будет останавливаться только при получении ввода. Раньше timeout=5s означал, что либо будет получен ключ за 5 секунд, либо вернется 0xFFFF как ключ (что означает тайм-аут). Когда это будет исправлено, этот цветной пример «перезагрузки» снова будет работать. @rextended - именно ваш «символ замены» в теме юникода заставил меня искать ANSI-код для очистки. Но, думаю, что «c» - это довольно очевидный код для этого…
     
     
     
    Amm0
    Guest
    #13
    0
    18.07.2023 16:18:00
    FWIW, я написал обертку под названием “CHALK”, которая создает различные ANSI escape коды для цветного оформления вывода. Смотри http://forum.mikrotik.com/t/chalk-function-for-colorizing-text-output-using-ansi-codes/168093/1
     
     
     
    vecernik87
    Guest
    #14
    0
    01.09.2023 07:02:00
    Отлично. Теперь у нас есть раскрашенный текст в терминале. Как долго ждать, пока кто-то адаптирует DOOM для ROS CLI?
     
     
     
    rextended
    Guest
    #15
    0
    02.09.2023 15:13:00
    Ehm…
     
     
     
    Amm0
    Guest
    #16
    0
    02.09.2023 15:23:00
    Более разумный старт — добавить ANSI-цвета к https://en.wikipedia.org/wiki/Colossal_Cave_Adventure ... смотрите CLIGAMES - контейнер с играми для UNIX CLI, доступными через /system/telnet - Контейнеры - форум сообщества MikroTik
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры