関数
function spinner (){local i=0
local spin='/-\|'local n=${#spin}while true;do
sleep 0.5
echo-en"${spin:i++%n:1}$*\r"done}
説明
n=${#spin}
:spin
という変数の文字列の長さを取得していますecho -e
:-e
オプションを指定すると\r
のようなエスケープシーケンスを解釈するようになりますecho -n
: 改行しないようにします${<文字列>:n:m}
: 文字列のn文字目からm文字分の長さの部分文字列i++%n
: iの数値をnで割ったあまりを返してiに1を加えます$*
: spinner関数に渡された引数を全て出力します\r
: キャリッジリターン。カーソル位置を行頭に戻します
使用例
spinner waiting... & pid=$!
:
(時間のかかる処理)
:
kill$pidwait$pid 2> /dev/null