関数
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