баннер (Unix)
Операционная система | Unix и Unix-подобные |
---|---|
Тип | Команда |
Программа баннер - в Unix и Unix-подобных операционных системах выводит большую художественную версию текста в формате ASCII, которая передается ей в качестве аргументов программы . Одним из вариантов использования этой команды является создание хорошо заметных страниц-разделителей для заданий печати . [ 1 ]
Операция
[ редактировать ]Каждый аргумент усекается до 10 символов и печатается на отдельной «строке». Поэтому, чтобы напечатать несколько слов в одной строке, их необходимо передать как один аргумент, что делается из оболочки путем экранирования слов или заключения их в кавычки. [ 1 ]
Родственная и более гибкая программа — Figlet , которая может отображать текст разными шрифтами и ориентациями. [ 2 ]
Выполнение
[ редактировать ]Способ внутренней реализации программы устарел. Используемые символьные шрифты жестко встроены в сам программный код как статически инициализированные структуры данных. Используются две структуры данных. Первая представляет собой таблицу данных, содержащую последовательность инструкций печати, которые кодируют растровое изображение для каждого символа (в кодировке, специфичной для banner
программа). Второй — это индекс в этой таблице, который указывает для каждого кода символа, где начинаются и заканчиваются инструкции печати для этого символа. [ 3 ]
Обе структуры данных были написаны от руки. Спинеллис отмечает, что «трудно придумать более подверженный ошибкам и непригодный для поддержки формат данных». Он отмечает резкий контраст между исходным кодом banner
программу и автоматически сгенерированный исходный код для кодирования компьютерных шрифтов в данные программы (для сравнения используются данные шрифта 6х10 в исходном коде порта NetBSD для Mac68k ). Автоматически сгенерированные данные комментируются, документируя с помощью ASCII-изображения, как были получены битовые комбинации. Автоматически сгенерированные данные были созданы из файла растрового изображения, который сам был создан с помощью программы создания/редактирования растрового изображения с графическим пользовательским интерфейсом. А автоматически сгенерированные данные организованы простым и очевидным образом — последовательность незакодированных байтов фиксированной длины для каждого глифа . [ 3 ]
Спинеллис далее отмечает, что в современных компьютерных системах редко бывает разумно встраивать такие данные в сам исполняемый образ программы, поскольку прирост производительности от этого незначителен. Это затрудняет адаптацию программы к различным регионам или ее обслуживание. Более предпочтительный подход в современных системах — хранить такие данные в отдельном файле данных, отличном от файла исполняемого образа программы, или в ответвлении ресурса программы, который программа считывает во время выполнения. [ 3 ]
Версии
[ редактировать ]Неполный список версий:
- Автор: AT&T , в UNIX System V. [ 4 ] [ 5 ] [ 6 ]
- Автор: Cedar Solutions . Работает в современных системах Linux с 2008 года. Печатает только по горизонтали с фиксированным размером.
- из Мэри Энн Хортон Калифорнийского университета в Беркли, распространяется как часть пакета bsdmainutils под названием принтербаннер . Работает на современных системах Linux, GNU Hurd и Mac OS X , начиная с 2008 года. Печатается вертикально с использованием шрифта переменного размера.
Пример вывода
[ редактировать ]Из терминальной баннерной программы:
$ banner 'Hello!'
# # ###
# # ###### # # #### ###
# # # # # # # ###
####### ##### # # # # #
# # # # # # #
# # # # # # # ###
# # ###### ###### ###### #### ###
Одна буква из баннерной программы, ориентированной на принтер, обычно встречающейся в BSD и ее производных:
$ banner -w80 "a"
#####
#########
############### ###
################ ######
################## ########
##### ##### #########
#### #### ## ###
### #### ##
### ### ##
### ### ###
#### ### ####
#############################
##############################
##############################
############################
###########################
###
#
#
Отображение непрерывных часов в течение примерно 1000 секунд: [ а ] [ б ]
$ repeat 1000 sh -c '( clear ; date +" %H.%M.%S" | xargs banner ; sleep 1)'
# ##### # ##### ####### #######
## # # ## # # # #
# # # # # # # #
# ###### # ##### ###### ######
# # # ### # # ### # #
# # # ### # # ### # # # #
##### ##### ### ##### ####### ### ##### #####
См. также
[ редактировать ]- Figlet — утилита Linux , предоставляющая ту же функциональность при выборе шрифта баннера.
Примечания
[ редактировать ]- ^ Если следующий код не запускается в оболочке Zsh , необходимо определить команду повтора: [ 7 ] как в этом коде:
function repeat(){ for ((i=0;i<$1;i++)); do eval ${*:2} }
или этого определения можно избежать, заменив команду повтора циклом while , например:
$ i=0 ; while (($i<1000)); do sh -c '( clear ; date +" %H.%M.%S" | xargs banner ; sleep 1 ; ((i=$i+1)))' ; done
- ^ Это также можно сделать с помощью утилиты Figlet с заменой
banner
сfiglet -f banner
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Стив Морицугу; Санджив Гуха; Джеймс Эдвардс; Дэвид Питтс (2000). Практический UNIX . Издательство Que. стр. 220–221 . ISBN 0-7897-2250-Х .
- ^ Арнольд Роббинс (2006). Коротко о UNIX . О'Рейли. стр. 24 . ISBN 0-596-10029-9 .
- ^ Перейти обратно: а б с Диомидис Спинеллис (2006). Качество кода . Adobe Пресс. стр. 70–71. ISBN 0-321-16607-8 .
- ^ Хэтч (19 апреля 2004 г.). «Система V в AIX и Dynix/ptx» . Архивировано из оригинала 26 мая 2009 г. Проверено 23 июля 2008 г.
- ^ «AIX: Документ 157-28-E» (PDF) . zen77087.zen.co.uk . [ постоянная мертвая ссылка ]
- ^ «Пакет: sysvbanner (1.0.15 и другие)» . Дебиан . Архивировано из оригинала 20 декабря 2016 г. Проверено 6 мая 2010 г.
- ^ Франковский, Енджей (8 мая 2020 г.). «Команды Linux – повторите команду n раз» . Архивировано из оригинала 19 ноября 2021 года . Проверено 22 января 2022 г.
Дальнейшее чтение
[ редактировать ]- Амир Афзал (2008). «Знамя команды». UNIX без границ . Прентис Холл. стр. 462–463. ISBN 0-13-119449-6 .
Внешние ссылки
[ редактировать ]- 4.2BSD по играм Руководство –
- FreeBSD по играм Руководство –