こんちは
塩ハム(d)です
みすてむずアドベントカレンダー2024 12/17の記事です
前回12/17の記事としてこちらを書きました
作りました(血涙)
unicuteコマンド
エスケープシーケンスで動かしてほしいとのことなので、こちらのページを参考にして書いてみました
まずはアニメーションさせるために、変数にうにのAAを書いていきます
こちらがその1つです
UNI_0="
\ うにです /
 ̄ ̄ ̄∨ ̄ ̄ ̄
\\\||| ||//
=三(( ))≡=
//|| |||\\\"
それとは別にうにをほめたたえる変数も書きます
UNICUTE="
うにだね
かわいいね"
また、せっかくなので背景を青、文字色を白にして太字にします
せっかくなのでね
# 太字 文字:白 背景:青
echo -e "\e[1m \e[37m \e[44m"
echo -e "$UNI_0"
echo -e "$UNICUTE"
sleep 1.5
そうするとctrl+Cとかでキャンセルしたときに色が戻りません
さっきの処理の上にtrapコマンドを挿入しましょう
fix_window() {
trap 1 2 3 4 5 15 20
echo -e "\e[3B"
echo -e "\e[0m"
exit 0
}
trap 'fix_window' 1 2 3 4 5 15 20
そしたら変数LINEにAAのライン数を求める処理、SUFFIXとNUMにAAの変数を求めるための定義を書いて、最後にカーソルを所定の位置に移動します
LINE=$(echo -e "${UNI_1}"|wc -l)
SUFFIX="UNI_"
NUM=1
echo $'\e[5A'
あとはループ処理です
一気に書いていきます
COUNTを5回に設定し、0回になるまでループします
次にfor文でうにのAAを消去する処理を書きます
そうしたらevalコマンドでAAの変数を結合して表示、0.5秒待機
LINEとNUMの変数を更新し、ループ閉じ
do
for i in $(seq 1 ${LINE});do
echo $'\e[1A' $'\e[1G' $'\e[2K' $'\e[1A'
done
eval echo -e \"\${${SUFFIX}${NUM}}\"
sleep 0.5
LINE=$(eval echo -e \"\${${SUFFIX}${NUM}}\"|wc -l)
NUM=$((${NUM} + 1))
if [ $NUM -gt 8 ]; then
NUM=1
COUNT=$((${COUNT} - 1))
fi
done
最後にエスケープシーケンスとtrapコマンドで元に戻してコマンド終了です
全コードがこちらになります
#!/bin/bash
# loop count
COUNT=5
UNI_0="
\ うにです /
 ̄ ̄ ̄∨ ̄ ̄ ̄
\\\||| ||//
=三(( ))≡=
//|| |||\\\"
UNI_1="
\ 通りますよ /
 ̄ ̄ ̄∨ ̄ ̄ ̄
\\\\\\\\ |///
=三(( ))≡=
///| \\\\\\\\ ((("
UNI_2="
\ 通りますよ /
 ̄ ̄ ̄∨ ̄ ̄ ̄
\\\||| ||//
=三(( ))≡=
//|| |||\\\ ((("
UNI_3="
\ 通りますよ /
 ̄ ̄ ̄∨ ̄ ̄ ̄
\\\\\\\\ |///
=三(( ))≡=
///| \\\\\\\\ ((("
UNI_4="
\ !!! /
 ̄ ̄ ̄∨ ̄ ̄ ̄
\\\||| ||//
=三(( ))≡=
//|| |||\\\"
UNI_5="
\ 戻りますよ /
 ̄ ̄ ̄∨ ̄ ̄ ̄
\\\\\| /////
=三(( ))≡=
))) ///// |\\\\\"
UNI_6="
\ 戻りますよ /
 ̄ ̄ ̄∨ ̄ ̄ ̄
\\\|| |||//
=三(( ))≡=
))) //||| ||\\\"
UNI_7="
\ 戻りますよ /
 ̄ ̄ ̄∨ ̄ ̄ ̄
\\\\\| /////
=三(( ))≡=
))) ///// |\\\\\"
UNI_8="
\やっぱいいや /
 ̄ ̄ ̄∨ ̄ ̄ ̄
\\\|| |||//
=三(( ))≡=
//||| ||\\\";
UNICUTE="
うにだね
かわいいね"
fix_window() {
trap 1 2 3 4 5 15 20
echo -e "\e[3B"
echo -e "\e[0m"
exit 0
}
trap 'fix_window' 1 2 3 4 5 15 20
# 太字 文字:白 背景:青
echo -e "\e[1m \e[37m \e[44m"
echo -e "$UNI_0"
echo -e "$UNICUTE"
sleep 1.5
LINE=$(echo -e "${UNI_1}"|wc -l)
SUFFIX="UNI_"
NUM=1
echo $'\e[5A'
until [ ${COUNT} -eq 0 ]
do
for i in $(seq 1 ${LINE});do
echo $'\e[1A' $'\e[1G' $'\e[2K' $'\e[1A'
done
eval echo -e \"\${${SUFFIX}${NUM}}\"
sleep 0.5
LINE=$(eval echo -e \"\${${SUFFIX}${NUM}}\"|wc -l)
NUM=$((${NUM} + 1))
if [ $NUM -gt 8 ]; then
NUM=1
COUNT=$((${COUNT} - 1))
fi
done
echo -e "\e[3B \e[0m"
trap 1 2 3 4 5 15
感想
一番上の#!/bin/bash
(シバンっていうんですね)を#!/bin/sh
にしてたせいでシンタックスエラーが出てるのがなかなか解決できずに詰まってました
皆さん、bashで指定したほうがいいです、おすすめです
というわけでこれにて完成とさせていただきます、お疲れさまでした
あ、そういえば
ついでにコマンドとして設定する方法を書いておきますね
カレントディレクトリはunicuteのファイルがあるところで行って下さい
cp unicute /usr/local/bin/unicute
chmod 777 /usr/local/bin/unicute
これでコマンドunicute
が使えます
以上で本当におしまいです