Псевдографика: Команда для создания «Матрицы» в терминале.

Введение.

Эта команда на Bash представляет собой анимированный эффект «дождя» из символов в терминале в стиле фильма «Матрица».

Примечание: Для работы команды требуется, чтобы терминал поддерживал управляющие последовательности ANSI (например, \033[...) и отображение символов Юникода.

Синтаксис.

Монолитная консольная команда для создания «Матрицы» в терминале:

while :;do echo $LINES $COLUMNS $((RANDOM%COLUMNS)) "$(printf "\U$((RANDOM%500+1000))")";sleep 0.05;done|gawk '{a[$3]=0;for(x in a){o=a[x];a[x]=a[x]+1;c=int(rand()*5);if(c==0)col="\033[1;32m";else if(c==1)col="\033[0;32m";else if(c==2)col="\033[1;36m";else if(c==3)col="\033[1;31m";else col="\033[1;37m";printf "\033[%s;%sH%s%s",o,x,col,$4;printf "\033[%s;%sH\033[0m",a[x],x;if(a[x]>=$1)a[x]=0;}}'

Наслаждаемся.

Надоест, прерываем традиционно Ctrl + C, затем чистим экран:

$ reset

Разбор синтаксиса.

Разберем, как она работает:

Основные части команды.

while :; do … done

Это бесконечный цикл, который будет повторять команды внутри себя до тех пор, пока его не остановят вручную (например, нажатием Ctrl+C).

echo $LINES $COLUMNS $((RANDOM%COLUMNS)) «$(printf «\U$((RANDOM%500+1000))»)»

  • $LINES — количество строк в терминале.
  • $COLUMNS — количество столбцов в терминале.
  • $((RANDOM%COLUMNS)) — случайное число от 0 до количества столбцов минус один (определяет случайный столбец для вывода символа).
  • $(printf "\U$((RANDOM%500+1000))") — случайный символ Юникода из диапазона U+1000 до U+14FF (например, символы из различных алфавитов или специальные символы).

Эти значения передаются в конвейер (|) для обработки командой gawk.

sleep 0.05

Задержка на 0.05 секунд между каждой итерацией цикла. Это управляет скоростью «дождя».

gawk ‘{…}’

Это скрипт на языке awk, который обрабатывает входные данные (строки, передаваемые из echo).

Внутри awk

  • a[$3]=0 — Создается ассоциативный массив a, где ключом является случайный столбец ($3), а значением — текущая строка.
  • цикл for(x in a) — Итерируется по всем элементам массива a.
  • o=a[x]; a[x]=a[x]+1 — Перемещает символ на следующую строку.
  • c=int(rand()*5) — Случайным образом выбирает цвет текста.
  • printf "\033[%s;%sH%s%s",o,x,col,$4 — Выводит символ в нужной позиции экрана с выбранным цветом.
  • printf "\033[%s;%sH\033[0m",a[x],x — Очищает предыдущую позицию символа.
  • if(a[x]>=$1)a[x]=0 — Если символ достигает нижней границы экрана ($1 — количество строк), он сбрасывается вверх.

Итог

Команда создает анимацию, где случайные символы Юникода «падают» сверху вниз по случайным столбцам терминала. Символы меняют цвет (зеленый, голубой, красный, белый и так далее), создавая эффект «дождя» из символов. Скорость падения регулируется задержкой sleep 0.05.

Оригиналы источников информации.

Друзья нашли где-то.

image_printСКАЧАТЬ ВЕРСИЮ ДЛЯ ПЕЧАТИ

Вам может также понравиться...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *