今回はシェルスクリプトでスピナー(待ち時間中を示すアニメーション)を表示する方法についてです。
スピナーとは?
ある程度長い時間(数秒以上)かかる処理を実行したとき、「処理中ですよ」ということを示す風車のようなくるくる回るアイコンを見たことはありますか?待ち時間にくるくる回って処理中だと示すやつを「スピナー(spinner)」と言います。環境によっては砂時計のアイコンだったりもしますね。下記のサイトは、スピナーの例です。
CSSPIN - CSS Spinners and Loaders
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 の例でした!
コメント