bashでタイマー作ってみた

2023/07/22に公開

macで指定時間後に音がなるタイマー使いたかったのですが、ブラウザ上のものだと音がならない事があったりした(ユーザアクションがないからjs実行できない?)ので、ターミナルでさくっと実行できないかと思い調べてみました。

実施環境
項目 詳細
PC MacBook Pro(14 インチ、2021)Apple M1 Pro
OS MacOS Ventura 13.4

できたもの

軽く調べてみたのですが、最終的にChatGPTに聞いたやつが一番優秀な気がした…それを少しいじったものがこちら。

# 関数定義部
countdown() {
    local seconds=$1
    while [ $seconds -gt 0 ]; do
        echo -ne "残り時間: $seconds\033[0K\r"
        sleep 1
        ((seconds--))
    done
    echo "カウントダウン終了"
    
    # 音を鳴らす
    # Sounds内には他にもいくつか音がありました
    afplay /System/Library/Sounds/Hero.aiff
}

# 実行部:カウントダウンの開始秒数を指定します
countdown 10  # 10秒のカウントダウン

-neオプション

オプション 内容
-n 通常echoは必ず改行しますが、改行しないようにします。
-e \rなどのエスケープシーケンスを解釈するようになります。

\033[0K\r

ANSIエスケープコード

オプション 内容
\033 ANSIエスケープコードの始まりを表す(ESCを表す)
[0K ESC[nK(nは数字)で行消去を表す。0の場合カーソルより後ろを消去
\r 行の先頭に戻る

カーソルより後ろを消去なら\033[0Kいらなくないか…と思ったんですが、実際削除しても動き変わりませんでした…ただ、調べた感じ複数サイトで必ずつけてたので、なにか理由があるのかもしれない…ちょっとわからないです、すみません。(環境でなにか変わる?)

保存

.bashrc.zshrcに記述しておけばすぐに使えます。

nano ~/.bashrc

.bashrc(.zshrc)内に関数定義部分を追記。

countdown n

まとめ

mac標準の時計アプリ使えばそれで済んだ

Discussion