我想编写一个执行安装相关任务的shell脚本。我想通过打印字符|,/,\, - 来显示一些像旋转圆圈的图标。安装完成后,此圈将消失。任何有关这方面的帮助将不胜感激。
答案 0 :(得分: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的版本适用于多个shell。
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
}
答案 1 :(得分:2)
echo -e 'abc\bd'
^^---backspace char
将输出
abd
所以基本上你输出一个动画字符,然后输出一个退格,然后输出下一个字符等......
答案 2 :(得分:2)
公认的解决方案过于复杂。你可以这样做:
while sleep 1; do
i=$((++i%4 + 2));
printf '\b|/-\' | cut -b 1,$i | tr -d '\n';
done
(注意,亚秒级睡眠不是便携式的,也不是seq。)
答案 3 :(得分:0)
这是 POSIX shell兼容版本:
while true; do for x in '|' '/' '-' '\'; do printf '\b$x'; sleep 1; done; done
请注意,作为副作用,您的x
值将被覆盖。为了避免这种情况,请将说明纳入功能。
答案 4 :(得分:0)
由于你没有指定哪个shell,一个fish shell的小插件,使用数组可以非常优雅地完成:
set -l symbols ◷ ◶ ◵ ◴
while sleep 0.5
echo -e -n "\b$symbols[1]"
set -l symbols $symbols[2..-1] $symbols[1]
end
在这种情况下,symbols
是一个数组变量,如果它被旋转/移位,则是内容,因为$symbols[2..-1]
都是条目,但是第一个。
答案 5 :(得分:0)
为了详细说明@gavenkoa 的答案,变量扩展周围应该有双引号,这样我们应该得到一个原始但符合 POSIX 标准的微调器:
while true; do for x in '|' '/' '-' '\'; do printf "\b$x"; sleep 1; done; done
(这可能不值得单独回答,但我还不能发表评论,并且在尝试编辑旧答案时,它说编辑队列已满。)