先日、ちょろっと調べ物をしていたところこんなページを見かけた。 某掲示板から生まれたキャラクタの「やる夫」が煽ってくる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に、難読化して嫌がらせで設定してみたら面白いかもしれない(やっちゃいけません)。