回答:
そのスクリプトを使用します。
#!/bin/bash
chars="/-\|"
while :; do
for (( i=0; i<${#chars}; i++ )); do
sleep 0.5
echo -en "${chars:$i:1}" "\r"
done
done
while
ループが無限に実行されます。for
ループはで与えられた文字列の各文字トラフ実行されます$chars
。echo
キャリッジリターン付きで\r
改行なしで文字を出力し-n
ます。-e
エコーを強制して、などのエスケープシーケンスを解釈させます\r
。各変更の間に0.5秒の遅延があります。
echo
...でしたが、もちろんうまくいきprintf
ます。^^
\b
これはを使用した例です。これは、同じ文字を何度も上書きし続けるために、カーソルを1列左に移動するように端末エミュレータに指示します。
#!/usr/bin/env bash
spinner() {
local i sp n
sp='/-\|'
n=${#sp}
printf ' '
while sleep 0.1; do
printf "%s\b" "${sp:i++%n:1}"
done
}
printf 'Doing important work '
spinner &
sleep 10 # sleeping for 10 seconds is important work
kill "$!" # kill the spinner
printf '\n'
詳細については、BashFAQ 34を参照してください。
spinner &
、pidをローカル変数に格納してからspinner_pid=$!
、kill呼び出しをkill $spinner_pid &>/dev/null
printf "%s\r" "${chars:$i:1}"
ですか?