🌀

[bash] プログレス スピナーを表示する

2022/01/30に公開

bashで処理に時間がかかるスクリプトを実行しているときに,echoのみだと動いてる感じがないので,動いている雰囲気を出そう

↓ Progress spinner
https://material.angular.io/components/progress-spinner/overview#progress-spinner-overview

bash script

以下のスクリプトは,画像データからGIFを生成するスクリプト
spinner関数の定義をスクリプトの上の方に入れて
(何かの処理) & spinner "文字列"で使うことができる

#! /bin/bash

spinner() {
    local pid=$!
    local delay=0.5
    local spinstr='|/-\'
    while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do
        local temp=${spinstr#?}
        printf "[%c] : $1" "$spinstr"
        local spinstr=$temp${spinstr%"$temp"}
        sleep $delay
        printf "\b\b\b\b\b\b"
        for ((i=0 ; i<${#1} ; i++)); do
            printf "\b"
        done

    done
    printf "[o] $1\n"
}

cd img1
convert -delay 10 -loop 0 *.png animation.gif & spinner "img1"

cd ../img2
convert -delay 10 -loop 0 *.png animation.gif & spinner "img2"

cd ../img3
convert -delay 10 -loop 0 *.png animation.gif & spinner "img3"

cd ../img3
convert -delay 10 -loop 0 *.png animation.gif & spinner "img4"

実行結果

参考リンク

https://stackoverflow.com/questions/12498304/using-bash-to-display-a-progress-indicator

Discussion