Banner (Unix): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
→Esempi: +chiarire |
m WPCleaner v2.05 - redirect che deve rimanere orfano - Università della California, Berkeley |
||
(19 versioni intermedie di 10 utenti non mostrate) | |||
Riga 1:
{{titolo minuscolo}}
{{Software
|Sviluppatore =
|DataPrimaVersione = sysvbanner: 4 febbraio 1997
|SistemaOperativo = Unix-like
|Linguaggio =
|Genere = Utility
|Licenza = [[GPLv3]]+
|SoftwareLibero = sì
|SitoWeb =
}}
'''banner''' è un comando presente nei [[sistema operativo|sistemi]] [[Unix]] e [[Unix-like]]. Produce una [[ASCII art]] del testo fornito come [[parametro (programmazione)|argomento]].
Un utilizzo di questo comando consiste nel creare pagine di separazione ben visibili tra i fogli da stampare.<ref name="PracticalUnix">{{Cita libro|titolo=Practical UNIX|autore=Steve Moritsugu|autore2=Sanjiv Guha|autore3=James Edwards|autore4=David Pitts|url=https://archive.org/details/practicalunix00mori_1/page/220|via=archive.org|editore=Que Publishing|città=Indianapolis|anno=2000|lingua=EN|pp=[https://archive.org/details/practicalunix00mori_1/page/220 220–221]|ISBN=0-7897-2250-X|accesso=26 gennaio 2022}}</ref>
== Funzionamento ==
Ogni argomento è troncato in blocchi di 10 caratteri i quali vengono stampati su "linee" differenti. Per stampare più parole su una singola linea, esse devono essere quindi passate come un singolo argomento, cosa che viene eseguita dalla shell eseguendo l'''escape'' o citando le parole a seconda dei casi.<ref name=PracticalUnix />
Un programma correlato e più flessibile è [[FIGlet]], il quale può mostrare il testo con diversi font.<ref>{{Cita libro|titolo=UNIX in a Nutshell|autore=Arnold Robbins|url=https://archive.org/details/unixinnutshell00robb/page/24|via=archive.org|editore=O'Reilly|anno=2006|lingua=EN|annooriginale=1989|edizione=4|pp=[https://archive.org/details/unixinnutshell00robb/page/24 24]|ISBN=0-596-10029-9|accesso=26 gennaio 2022}}</ref>
== Implementazione ==
Il modo in cui il programma viene implementato internamente è antiquato. I font utilizzati sono inseriti nel codice del programma stesso, come strutture di dati inizializzate staticamente. Vengono utilizzate due strutture di dati: la prima è una tabella di dati comprendente una sequenza di istruzioni di stampa che codificano la bitmap per ogni carattere (in una codifica specifica del programma <code>banner</code>) mentre la seconda è un indice che in quella tabella indica, per ogni codice carattere, dove iniziano e finiscono le istruzioni di stampa per quel carattere.<ref name=Spinellis>{{Cita libro|titolo=Code Quality|url=https://archive.org/details/codequalityopens0000spin|autore=Diomidis Spinellis|wkautore=Diomidis Spinellis|editore=Adobe Press|anno=2006|lingua=EN|pp=[https://archive.org/details/codequalityopens0000spin/page/70 70]–71|ISBN=0-321-16607-8}}</ref>
Entrambe le strutture dati sono state scritte a mano. Spinellis osserva che è "difficile trovare un formato dati più soggetto a errori e non mantenibile". Egli osserva un netto contrasto tra il codice sorgente del programma <code>banner</code> e il codice sorgente automaticamente generato per codificare i [[font]] nella sezione ''program data'' (usando nel codice sorgente i dati del font 6×10 del [[Porting|port]] mac68k di [[NetBSD]] per confronto). I dati generati automaticamente sono stati generati da un file bitmap, a sua volta generato utilizzando un programma di creazione/modifica [[bitmap]] con un'interfaccia utente grafica. Successivamente essi vengono commentati, documentando con [[ASCII art]] come sono stati derivati i ''[[pattern]]'' di bit. Tali dati sono organizzati in modo semplice ed ovvio: una sequenza di lunghezza fissa di byte non codificati per ogni [[glifo]].<ref name=Spinellis />
Spinellis osserva inoltre che nei moderni sistemi informatici è raramente sensato incorporare tali dati nell'immagine eseguibile del programma stesso, poiché i guadagni in termini di prestazioni in tal modo sono trascurabili. Fare ciò rende difficile adattare il programma a diverse localizzazioni oppure mantenere il programma. L'approccio più seguito nei sistemi moderni è quello di archiviare tali informazioni in un file di dati separato, distinto dal file immagine eseguibile del programma, o in un [[resource fork]] del programma, che il programma legge in fase di esecuzione.<ref name=Spinellis />
== Versioni ==
Lista non esaustiva di versioni:
* Di [[AT&T]], in [[UNIX System V]].<ref>{{cita web|titolo=System V in AIX and Dynix/ptx|url=http://www.zen77087.zen.co.uk/nug/alleg/sysv-aix-dynix.shtml|autore=Hatch |data=19 aprile 2004|lingua=EN
|accesso=23 luglio 2008|urlarchivio=https://web.archive.org/web/20090526232236/http://www.zen77087.zen.co.uk/nug/alleg/sysv-aix-dynix.shtml |dataarchivio=26 maggio 2009|urlmorto=sì}}</ref><ref>{{cita web|titolo=AIX 7.2: banner Command|url=https://www.ibm.com/docs/en/aix/7.2?topic=b-banner-command|editore=[[IBM]]|lingua=EN|accesso=27 gennaio 2022|urlmorto=no}}</ref> Nei sistemi basati su [[Debian]] il comando ''banner'' è fornito da questa versione nel pacchetto ''sysvbanner''<ref name="debian-package">{{cita web|titolo=Dettagli sul pacchetto ''sysvbanner'' in Debian (v. 1.0.15 o successive)|url=https://packages.debian.org/stable/sysvbanner|editore=[[Debian]]|lingua=EN|accesso=6 maggio 2010|urlarchivio=https://web.archive.org/web/20161220235930/https://packages.debian.org/stable/sysvbanner|dataarchivio=20 dicembre 2016|urlmorto=no}}</ref> e per quest'ultimo, ''banner'' accetta esclusivamente il testo sotto forma di argomento non permettendone l'utilizzo tramite [[pipe (informatica)|pipe]].
* Di [http://cedar-solutions.com/software/utilities.html Cedar Solutions]. Gira su sistemi moderni [[Linux]] a partire dal 2008. Stampa solo orizzontalmente con una dimensione fissa del font.
* Di [[Mary Ann Horton]] all'[[Università della California - Berkeley]], distribuita come parte del pacchetto [https://packages.debian.org/stable/bsdmainutils bsdmainutils], sotto il nome di <code>printerbanner</code>. Può essere eseguita su versioni moderne di Linux, [[GNU Hurd]], e sistemi [[Mac OS X]] a partire dal 2008. Stampa verticalmente con la possibilità di variare la dimensione del font.
== Esempi ==
<syntaxhighlight lang="bash">
$ banner 'Hello!'
# # ###
# # ###### # # #### ###
# # # # # # # ###
####### ##### # # # # #
# # # # # # #
# # # # # # # ###
# # ###### ###### ###### #### ###
</syntaxhighlight>
Una lettera dal programma banner orientato alla stampa come di solito si presenta in [[BSD]] e derivati:
<syntaxhighlight lang="bash">
$ banner -w80 "a"
#####
#########
############### ###
################ ######
################## ########
##### ##### #########
#### #### ## ###
### #### ##
### ### ##
### ### ###
#### ### ####
#############################
##############################
##############################
############################
###########################
###
#
#
</syntaxhighlight>
In questo esempio il comando ''banner'' stampa l'ora corrente fornita tramite <code>date</code> all'atto della chiamata.
<syntaxhighlight lang="bash">
$ banner `date +"%H:%M:%S"`
##### ##### # ##### ####### # # #
# # # # # # # # # # # # ## # #
Line 15 ⟶ 82:
# # # # # # # # # # # #
####### ##### # ##### # # ##### #
</syntaxhighlight>
Mostra un orologio dinamico per circa 1000 secondi{{efn|Se il codice seguente non è eseguito da una shell [[Zsh]] il comando ''repeat'' necessita di essere definito,<ref name=zsh>{{Cita web|url=https://www.baeldung.com/linux/repeat-command|titolo=Linux Commands – Repeat a Command n Times|autore=Jędrzej Frankowski|data=8 maggio 2020|lingua=EN|accesso=22 gennaio 2022|urlarchivio=https://web.archive.org/web/20211119163230/https://www.baeldung.com/linux/repeat-command|dataarchivio=19 novembre 2021|urlmorto=no}}</ref> come in questo frammento di codice:
<syntaxhighlight lang="bash">
function repeat(){
for ((i=0;i<$1;i++)); do
eval ${*:2}
}
</syntaxhighlight>
oppure tale definizione può essere evitata rimpiazzando direttamente il comando ''repeat'' con un [[ciclo while]]:
<syntaxhighlight lang="bash">$ i=0 ; while (($i<1000)); do sh -c '( clear ; date +" %H.%M.%S" | xargs banner ; sleep 1 ; ((i=$i+1)))' ; done</syntaxhighlight>}} (equivale all'utilizzo dell'utility [[FIGlet]] con la sostituzione di <code>banner</code> con <code>figlet -f banner</code>):
<syntaxhighlight lang="bash">
$ repeat 1000 sh -c '( clear ; date +" %H.%M.%S" | xargs banner ; sleep 1)'
# ##### # ##### ####### #######
## # # ## # # # #
# # # # # # # #
# ###### # ##### ###### ######
# # # ### # # ### # #
# # # ### # # ### # # # #
##### ##### ### ##### ####### ### ##### #####
</syntaxhighlight>
== Note ==
=== Esplicative ===
{{Gruppo di note}}
=== Bibliografiche ===
<references />
== Bibliografia ==
* {{cita libro|titolo=UNIX Unbounded|autore=Amir Afzal|capitolo=The banner command|pagine=462–463|editore=Prentice Hall|anno=2008|lingua=EN|ISBN=0-13-119449-6}}
== Voci correlate ==
* [[FIGlet]] – una utility [[Linux]] che fornisce la stessa funzionalità quando viene scelto il font banner
== Collegamenti esterni ==
* {{
* {{
* {{Cita web|url=https://wwwcdf.pd.infn.it/AppuntiLinux/a2247.htm#almlindex9323|titolo=200.1 Banner|autore=Daniele Giacomini|wkautore=Daniele Giacomini|sito=[[Appunti di informatica libera]]|data=2007|accesso=27 gennaio 2022|urlarchivio=https://web.archive.org/web/20070829110150/https://wwwcdf.pd.infn.it/AppuntiLinux/a2247.htm#almlindex9323|dataarchivio=29 agosto 2007|urlmorto=no}}
* {{Cita web|url = https://www.tuhs.org/cgi-bin/utree.pl?file=4.2BSD/usr/man/man6/banner.6|autore=Mark Horton|titolo=banner (6) – 4.2BSD Games Manual|data=1 febbraio 1983|lingua=EN|accesso=27 gennaio 2022}}
* {{Cita web|url=https://www.freebsd.org/cgi/man.cgi?query=banner&sektion=6|titolo=banner(6) – FreeBSD Games Manual|sito=[[FreeBSD]]|data=26 maggio 2020|lingua=EN|accesso=27 gennaio 2022}}
{{Comandi Unix}}
|