sysvbannerを書き換える


アニメ『ARIA The AVVENIRE』

ARIAは、まだアニメがそんなに好きではない頃に見て、当時は面白さが分かりませんでした。アニメ好きとなった今は、楽しんで見ることができてます。癒されます。

今回はsysvbannerを書き換えて出力を変えてみたいと思います。
まずbannerコマンドの実行ファイルの位置を確認し、コピーしてきます。
(sysvbannerが入ってなかったら、先にapt-get install sysvbannerでインストールしておきます)

takk@deb9:~/tmp$ which banner
/usr/bin/banner
takk@deb9:~/tmp$ cp /usr/bin/banner .
takk@deb9:~/tmp$ 

実行ファイルbannerから#で構成された文字列を抽出。

takk@deb9:~/tmp$ strings ./banner -td | grep '#'> data
takk@deb9:~/tmp$ 

このようなデータが集まりました。

takk@deb9:~/tmp$ grep '#' data | head
   4328          ###  ### ###  # #   ##### ###   #  ##     ###  
   4392          ###  ### ###  # #  #  #  ## #  #  #  #    ###   
   4456          ###   #   # ########  #   ### #    ##      #   
   4520           #            # #   #####    #    ###     #    
   4584                      #######   #  #  # ####   # #       
   4648          ###           # #  #  #  # #  # ##    #        
   4712          ###           # #   ##### #   ### #### #       
   4776    ##    ##                                            #
   4840   #        #   #   #    #                             # 
   4904  #          #   # #     #                            #  
takk@deb9:~/tmp$ 

このデータを、ddコマンドに変換します。

takk@deb9:~/tmp$ cat data | perl -pe 'chomp;s/^(.......).(.*)$/sprintf("echo -n \"%s\" | dd seek=%d bs=1 count=%d conv=notrunc of=banner\n",$2,$1,length $2)/e' > t.sh
takk@deb9:~/tmp$ 

実行。

takk@deb9:~/tmp$ . t.sh
56 bytes copied, 0.000318229 s, 176 kB/s
56+0 レコード入力
56+0 レコード出力
56 bytes copied, 0.000301408 s, 186 kB/s

省略

56 bytes copied, 0.000305567 s, 183 kB/s
56+0 レコード入力
56+0 レコード出力
56 bytes copied, 0.000303123 s, 185 kB/s
takk@deb9:~/tmp$ 

同じデータで書き換えているので、bannerコマンドの動きは変わりません。

takk@deb9:~/tmp$ ./banner HELLO
#     # ####### #       #       #######
#     # #       #       #       #     #
#     # #       #       #       #     #
####### #####   #       #       #     #
#     # #       #       #       #     #
#     # #       #       #       #     #
#     # ####### ####### ####### #######

takk@deb9:~/tmp$ 

次に、先ほど作成したスクリプト内の文字列の#を+に置換。

takk@deb9:~/tmp$ tr '#' '+' < t.sh > t2.sh
takk@deb9:~/tmp$ 

新しく作ったスクリプトを実行して、bannerコマンドを書き換えます。

takk@deb9:~/tmp$ . t2.sh
56 bytes copied, 0.000289596 s, 193 kB/s
56+0 レコード入力
56+0 レコード出力
56 bytes copied, 0.000297888 s, 188 kB/s

省略

56 bytes copied, 0.000299134 s, 187 kB/s
56+0 レコード入力
56+0 レコード出力
56 bytes copied, 0.000302852 s, 185 kB/s
takk@deb9:~/tmp$ 

実行すると、

takk@deb9:~/tmp$ ./banner HELLO
+     + +++++++ +       +       +++++++
+     + +       +       +       +     +
+     + +       +       +       +     +
+++++++ +++++   +       +       +     +
+     + +       +       +       +     +
+     + +       +       +       +     +
+     + +++++++ +++++++ +++++++ +++++++

takk@deb9:~/tmp$ 

#ではなく+でバナー表示されるようになりました。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA