先日、ちょろっと調べ物をしていたところこんなページを見かけた。 某掲示板から生まれたキャラクタの「やる夫」が煽ってくるcommand_not_found_handleを作ってみるよ、という内容のもの。

あー、これはうざいなぁ、と思いつつ、できればターミナルの画面をまるごと使用するのではなく、プロンプトのすぐ下で煽ってくるようにしたほうが面白そうだなーと思ったので、ちょっとやってみることにした。 オリジナルのはAAをechoで表示後にclearしてやることで処理しているのだけど、そうではなくプロンプトを表示させつつAA等を動かす場合、ANSI Escapeで処理してやる必要がある。

で、やってみた結果がこちら

command_not_found_handle() {
    ####
    # 変数の定義
    ####
    # 変数(ASCII ART)定義
    AA1="
          ____
       / \  /\ キリッ
      / (ー)(ー)\
     /  ⌒(__人__)⌒\     「$1」、
    |     |r┬-|    |
     \    \`ー'´  /
     ノ         \
     /´            ヽ
    | l              \
    ヽ -''\"~`\`'ー-、 -一'''''ー-、.
   ヽ __(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))"

    AA2_1="
           ____
         /_ノ  ヽ、\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ
 /⌒) ⌒) ⌒.::⌒(__人__)⌒:::    /⌒ )⌒ )⌒)
| / / /     |r┬-|    | (⌒)/ / / //  だっておwwwwwwwwwwwwwwwwwww
| :::::::(⌒)   | | |   /  ゝ ::::::/   そんなコマンドないおwwwwwwwwwwwww
|     ノ    | | |   \  / )   /
ヽ    /     \`ー'´    ヽ  /    /      バ
 |    |  l|l        l||l 从 ノ    バ   ン
 ヽ    -''\"~`\`'ー-、    -一'''''ー-、    ン
  ヽ __          __/"

    AA2_2="
          ____
        /_ノ  ヽ、\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ
 /⌒) ⌒) ⌒.::⌒(__人__)⌒:::    /⌒ )⌒ )⌒)
| / / /     |r┬-|    | (⌒)/ / / //  だっておwwwwwwwwwwwwwwwwwww
| :::::::(⌒)   | | |   /  ゝ ::::::/   そんなコマンドないおwwwwwwwwwwwww
|     ノ    | | |   \  / )   /
ヽ    /     \`ー'´    ヽ  /    /     バ
 |    |  l|l 从人 l|l   l||l 从 人 l|l  バ   ン
 ヽ    -''\"~`\`'ー-、    -一'''''ー-、    ン
  ヽ ____(⌒)(⌒)⌒) )    (⌒_(⌒)⌒)⌒))"

    AA2_3="
          ____
        /_ノ  ヽ、\
       o゚((●)) ((●))゚o
      /:::⌒(__人__)⌒:::
     |     |r┬-|     |          だっておwwwwwwwwwwwwwwwwwww
     \    | | |   /           そんなコマンドないおwwwwwwwwwwwww
      ノ    | | |   \
    /´     \`ー'´    ヽ           バ
    | |            \        バ   ン
    ヽ  -''\"~`\`'ー-、    -一'''''ー-、    ン
    ヽ __(⌒)(⌒)⌒) )    (⌒_(⌒)⌒)⌒))"

    AA_NUM_MIN=1
    AA_NUM_MAX=3
    COUNT=20
    SUFFIX="AA2_"
    trap '' 1 2 3 4 5 15

    ####
    # メインの処理
    ####
    # 最初のAA(AA1)の出力
    echo -e "$AA1"
    sleep 1

    # COUNT分のループ処理(AA2_1〜AA2_3の出力)
    LINE=$(echo -e "${AA1}"|wc -l)
    NUM=${AA_NUM_MIN}
    until [ ${COUNT} -eq 0 ];
    do
        for i in $(seq 1 ${LINE});do
            echo $'\e[1A' $'\e[1G' $'\e[2K' $'\e[1A'
        done

        eval echo \"\${${SUFFIX}${NUM}}\"
        sleep 0.15

        LINE=$(eval echo -e \"\${${SUFFIX}${NUM}}\"|wc -l)
        NUM=$((${NUM} + 1))
        if [ ${NUM} -gt ${AA_NUM_MAX} ];then
            NUM=${AA_NUM_MIN}
        fi

        COUNT=$((COUNT - 1))
    done
}

…うーん、うざい(´・ω・`)Ctrl+Cを効かなくしたらよりうざくなった。

誰かのMacに、難読化して嫌がらせで設定してみたら面白いかもしれない(やっちゃいけません)。