在Bash中模拟微调进度
问题描述:
我目前在学习如何使脚本更加冗长。下面的代码显示了一个微调器。但是,我很难修改这个微调以获得“下载”等字样。我希望词语和微调词都能出现在彼此旁边。我不是问如何实现微调来取得进展,而是如何与单词连接。怎么能实现这个目标?在Bash中模拟微调进度
sp='/-\|'
sc=0
spin() {
printf "\b${sp:sc++:1}"
((sc==${#sp})) && sc=0
}
endspin() {
printf "\r%s\n" "[email protected]"
}
until work_done; do
spin
some_work ...
done
endspin
答
虽然我很佩服埃德和Jakuje的DIY精神,我也很喜欢重用其他人的代码。如果您宁愿回收再利用,请考虑Louis Marascio's spinner。我把他的spinner()
功能到我的壳库,它是易于使用:
#!/bin/bash
. lib.sh
run_10s &
echo -n wait
spinner $!
echo -e "\rdone"
显示
$ ./test_lib
wait [/]
10秒钟微调旋转,然后将其清除左含wait
与\r
该行而你只剩下
$ ./test_lib
done
$
在屏幕上。
答
你可以这样做,这样
sp='/-\|'
sc=0
spin() {
printf "\r${sp:sc++:1} $1"
((sc==${#sp})) && sc=0
}
endspin() {
printf "\r%s\n" "[email protected]"
}
work_done() {
false
}
some_work() {
sleep 1
}
until work_done; do
spin "Downloading"
some_work ...
done
endspin
+0
可以将单词“下载”放在微调器之前吗? –
+0
@Code_Ed_Student使用'printf'\ r $ 1 $ {sp:sC++:1}''而不是在'spin'函数中。 –
太棒了!我宁愿采用这种方法。但是,我在一个while循环中调用了spinner函数。它最初按预定工作两秒钟,然后显示“waitwaitwaitwaitwaitwaitwaitwaitwaitwaitwait ...”。我该如何解决这个问题? –