インストール関連のタスクを実行するシェル スクリプトを作成したいと考えています。文字 |、/、\、- を出力して円を回転させるようなアイコンを表示したい。インストールが完了すると、この円は消えます。これに関する助けをいただければ幸いです。
2281 次
6 に答える
4
Marc Bの回答に基づいて、簡単なデモを次に示します。
spin () {
chars="| / – \\"
rotations=3
delay=0.1
for i in `seq 0 $rotations`; do
for char in $chars; do
echo -ne $char
sleep $delay
echo -ne '\b'
done
done
}
ターミナルに貼り付けて、「spin」と入力します。
更新: このバージョンは bash と zsh の両方で動作します。
spin () {
char=( \| / – \\ )
charLastIndex=3
rotations=3
delay=0.1
for i in `seq 1 $rotations`; do
for j in `seq 0 $charLastIndex`; do
echo -n ${char[$j]}
sleep $delay
echo -ne '\b'
done
done
}
更新: liori のバージョンは複数のシェルで動作します。
spin () {
rotations=3
delay=0.1
for i in `seq 0 $rotations`; do
for char in '|' '/' '-' '\'; do
#'# inserted to correct broken syntax highlighting
echo -n $char
sleep $delay
printf "\b"
done
done
}
于 2012-05-06T12:09:30.960 に答える
2
echo -e 'abc\bd'
^^---backspace char
出力します
abd
つまり、基本的には、アニメーション文字の1つを出力し、次にバックスペースを出力し、次の文字を出力するなどです。
于 2012-05-06T11:26:44.727 に答える
2
受け入れられた解決策は非常に複雑です。あなたはただ行うことができます:
while sleep 1; do
i=$((++i%4 + 2));
printf '\b|/-\' | cut -b 1,$i | tr -d '\n';
done
(1 秒未満のスリープは移植性がなく、seq でもないことに注意してください。)
于 2012-05-06T16:14:17.657 に答える
0
POSIX シェル準拠のバージョンは次のとおりです。
while true; do for x in '|' '/' '-' '\'; do printf '\b$x'; sleep 1; done; done
副作用として、値x
が上書きされることに注意してください。これを回避するには、命令を関数に含めます。
于 2016-01-18T14:28:22.167 に答える