bash script で待ち時間を示すスピナーの表示

どうも、ながやすです。
今回はシェルスクリプトでスピナー(待ち時間中を示すアニメーション)を表示する方法についてです。

スポンサーリンク

スピナーとは?

ある程度長い時間(数秒以上)かかる処理を実行したとき、「処理中ですよ」ということを示す風車のようなくるくる回るアイコンを見たことはありますか?待ち時間にくるくる回って処理中だと示すやつを「スピナー(spinner)」と言います。環境によっては砂時計のアイコンだったりもしますね。下記のサイトは、スピナーの例です。

CSS Spinners and Loaders - Modular, Customizable and Single HTML Element Code

このスピナーですが、シェルスクリプトでも実現可能です。ときどき見かけますね、「-」「\」「|」「/」を順番に表示してくるくる回るアニメーションを表示するやつです。

スピナーをbash scriptで実装する

シェルスクリプトを実行して、数秒間以上何も表示が出てこないと、普通は不安になります。実は何かの処理中でも、ユーザは不安になってうっかりCtl-cで中断したりしちゃいます。それを防ぐために、ユーザに「今頑張って処理してるから!」と示すためにスピナーを使います。下

このスピナーをbash のスクリプトでの作り方を示します。下記のようにechoとsleepを組み合わせればOKです。このようにアスキーアートでくるくる回るアニメーションを作って、ユーザに「処理中です!」と示すと良いです。

#!/bin/bash

chars="/-\|"

while :; do
  for (( i=0; i<${#chars}; i++ )); do
    sleep 1
    echo -en "${chars:$i:1}" "\r"
  done
done

# http://askubuntu.com/questions/623933/how-to-create-a-rotation-animation-using-shell-script より抜粋

まとめ

1秒スリープしたのちアニメーションを更新する、を繰り返すスクリプトを例示しました。数秒単位で処理時間がかかるスクリプトを作る際に、ユーザい処理中だと示すために便利なスクリプトかなと思います。これをベースにすれば色々応用ができるかなと思います。GUIを使うまでもなくアスキーアートで風車的なものは表示できますので、色々と活用して見ていただければなと思います。

以上、bash script での spinner の例でした!

シェアする

フォローする

スポンサーリンク