我有这个Bash微调代码:
#!/bin/bash
spinner(){
SP_STRING=${2:-"'|/=\'"}
while [ -d /proc/$1 ]
do
printf "$SP_COLOUR\e7 %${SP_WIDTH}s \e8\e[0m" "$SP_STRING"
sleep ${SP_DELAY:-.2}
SP_STRING=${SP_STRING#"${SP_STRING%?}"}${SP_STRING%?}
done
}
## Adjust to taste (or leave empty)
SP_COLOUR="\e[1;31m"
SP_WIDTH=1.1 ## Try: SP_WIDTH=5.5
SP_DELAY=.3
sleep 7 &
spinner "$!" '/-\|'
有没有办法让它以多种颜色输出微调器?所以每次旋转都会改变颜色。
此外,当微调器运行时,输入线显示在微调器之前并保持在那里直到微调器完成。我可以在代码中编辑什么来使输入行在微调器之下或之后?
答案 0 :(得分:2)
要在每次旋转中更改颜色,您可以定义颜色数组:
SP_COLORS=("\e[1;31m" "\e[1;32m")
然后在spinner循环之前,将索引初始化为此数组:
local sp_color_index=0
然后在微调器循环内部,递增此索引并适当地旋转它:
((sp_color_index = (sp_color_index + 1) % ${#SP_COLORS[@]}))
然后使用索引从数组中获取下一个颜色:
SP_COLOR=${SP_COLORS[sp_color_index]}
此外,当微调器运行时,输入线显示在微调器之前并保持在那里直到微调器完成。我可以在代码中编辑什么来使输入行在微调器之下或之后?
通过"输入行",我猜您指的是光标。
而不是在微调器之下或之后移动光标,
在旋转器循环之前隐藏它可能更好,
然后恢复它。您可以使用tput civis
进行隐藏,并使用tput cnorm
再次显示。
答案 1 :(得分:2)
多色微调器
for index in stride(from: 0, to: 10, by: 2){
print(index)
}
我添加了一个构造,每次显示SP_STRING时都会从colors表中获取一个随机数。
我还添加了函数参数的宽度和延迟,并将所有变量设置为本地
如果您想要随机单色,请在tput civis line下移动构造。
注意强>
你也可以选择颜色并将其传递给函数,如本例中的参数
#!/bin/bash
spinner () {
local SP_WIDTH="$3"
local SP_DELAY="$4"
local SP_STRING=${2:-'/-\|'}
local SP_COLOR=0
tput civis
while [ -d /proc/$1 ]; do
((RANDOM%2 == 0)) && SP_COLOR=3$((RANDOM%8)) || SP_COLOR=9$((RANDOM%8))
printf "\e[1;${SP_COLOR}m\e7 %${SP_WIDTH}s \e8\e[0m" "$SP_STRING"
sleep ${SP_DELAY:-.2}
SP_STRING=${SP_STRING#"${SP_STRING%?}"}${SP_STRING%?}
done
tput cnorm
}
sleep 7 &
spinner "$!" '' '1.1' '.3'
极限是幻想......
修改强>
256色版
#!/bin/bash
spinner () {
local SP_WIDTH="$3"
local SP_DELAY="$4"
local SP_STRING=${2:-'/-\|'}
local SP_COLOR="$5"
tput civis
while [ -d /proc/$1 ]; do
printf "\e[1;${SP_COLOR}m\e7 %${SP_WIDTH}s \e8\e[0m" "$SP_STRING"
sleep ${SP_DELAY:-.2}
SP_STRING=${SP_STRING#"${SP_STRING%?}"}${SP_STRING%?}
done
tput cnorm
}
sleep 7 &
spinner "$!" '' '1.1' '.3' '35'
如果你没有传递参数,我已为其设置了默认值