Псевдографика: Команда для создания «Матрицы» в терминале.
Введение.
Эта команда на 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.
Оригиналы источников информации.
Друзья нашли где-то.

