UNIXのbannerコマンド
`banner`コマンドは、
UNIX系
オペレーティングシステムで利用できるコマンドラインユーティリティの一つです。このコマンドは、
引数として与えられた
文字列を、巨大な
アスキーアート形式に変換して出力します。
概要
`banner`コマンドの主な用途は、テキストを大きく表示し、視覚的に目立たせることです。特に、
印刷ジョブの区切りページを作成する際に、見やすい区切りとして利用されることがあります。コマンドの基本的な動作は、与えられた
文字列を、大きな文字の
アスキーアートに変換し、標準出力に出力するというものです。
操作
`banner`コマンドは、
引数として与えられた
文字列を、それぞれ10文字ごとに区切って処理します。複数の単語を1行に出力させたい場合は、それらをまとめて一つの
引数として渡す必要があります。この際、
シェルが正しく処理できるように、エスケープ処理や
引用符で囲むことが必要です。
例えば、`banner Hello world` と入力すると、`Hello`と`world`は別々の行に表示されます。`banner "Hello world"`のように
引用符で囲むことで、`Hello world`が1行に表示されます。
関連プログラム
`banner`コマンドと類似のプログラムとして、`FIGlet`があります。`FIGlet`は、より柔軟なテキストの表示を可能にするプログラムで、異なるフォントや方向でテキストを表示させることができます。
`banner`コマンドの
実装は、エラーを起こしやすい旧式な方法で行われています。使用される文字フォントは、プログラムのコード内に静的に初期化される
データ構造として
ハードコーディングされています。この
データ構造は、各文字のビットマップを符号化する命令と、各文字の開始と終了位置を示すテーブルから構成されています。
これらの
データ構造は手動で作成されており、Spinelis氏によれば、エラーが発生しやすく、メンテナンスが困難であると指摘されています。彼は、`banner`コマンドの
ソースコードと、自動生成されたフォントデータとの比較を行い、自動生成されたデータが、GUIツールで作成したビットマップファイルから生成された、より理解しやすい形式であることを示しました。また、現代的な
コンピュータシステムにおいては、プログラムの実行イメージにデータを埋め込むことは賢明ではないと指摘しています。
バージョン
`banner`コマンドには、いくつかの派生バージョンが存在します。
AT&T版: UNIX System V に含まれるバージョン。
Cedar Solutions版: 現代的な
Linuxシステムで動作するバージョン。固定サイズで横方向に出力。
*
Mark Horton版: bsdmainutilsパッケージに含まれる`printerbanner`コマンド。可変サイズフォントで縦方向に出力が可能。
出力例
ターミナル指向の`banner`コマンドの出力例:
bash
$ banner Hello!
# ###
# ###### # # #### ###
# # # # # # ###
## ##### # # # # #
# # # # # #
# # # # # # ###
# ###### ###### ###### #### ###
プリンター指向の`banner`コマンドの出力例 (Mac OS Xなど):
bash
$ banner -w80 "a"
#####
#########
############### ###
################ ######
################## ########
##### ##### #########
#### #### ## ###
### #### ##
### ### ##
### ### ###
#### ### ####
#############################
##############################
##############################
############################
###########################
###
#
#
まとめ
`banner`コマンドは、
UNIX環境でテキストを視覚的に強調するためのシンプルなツールです。その
実装には古く、エラーを起こしやすい部分も残っていますが、
印刷ジョブの区切りや、ターミナルでのテキスト表示に役立ちます。また、`FIGlet`のような関連プログラムも存在し、用途に応じて使い分けることができます。現代的なアプローチとして、フォントデータを外部ファイルに保存することで、保守性と柔軟性を向上させる事が可能です。