Linux 在Bash中模拟微调器以获得进度
我目前正在学习如何使脚本更加冗长。下面的代码显示了一个微调器。但是,我很难修改此微调器,使其具有诸如“下载”之类的文字。我希望单词和微调器都出现在彼此旁边。我不是问如何实现spinner for progress,而是问如何与单词连接。如何实现这一目标Linux 在Bash中模拟微调器以获得进度,linux,bash,unix,Linux,Bash,Unix,我目前正在学习如何使脚本更加冗长。下面的代码显示了一个微调器。但是,我很难修改此微调器,使其具有诸如“下载”之类的文字。我希望单词和微调器都出现在彼此旁边。我不是问如何实现spinner for progress,而是问如何与单词连接。如何实现这一目标 sp='/-\|' sc=0 spin() { printf "\b${sp:sc++:1}" ((sc==${#sp})) && sc=0 } endspin() { printf "\r%s\n" "$@"
sp='/-\|'
sc=0
spin() {
printf "\b${sp:sc++:1}"
((sc==${#sp})) && sc=0
}
endspin() {
printf "\r%s\n" "$@"
}
until work_done; do
spin
some_work ...
done
endspin
你可以这样做
sp='/-\|'
sc=0
spin() {
printf "\r${sp:sc++:1} $1"
((sc==${#sp})) && sc=0
}
endspin() {
printf "\r%s\n" "$@"
}
work_done() {
false
}
some_work() {
sleep 1
}
until work_done; do
spin "Downloading"
some_work ...
done
endspin
虽然我钦佩Ed和Jakuje的DIY精神,但我也喜欢重用其他人的代码。如果你喜欢回收,而不是重新考虑。我将他的
spinner()
函数放入我的shell库,它很容易使用:
#!/bin/bash
. lib.sh
run_10s &
echo -n wait
spinner $!
echo -e "\rdone"
显示
$ ./test_lib
wait [/]
旋转器旋转10秒,然后用\r
清除左侧包含等待的行,您只剩下
$ ./test_lib
done
$
在屏幕上。旋转器前面会出现“下载”这个词吗?@Code\u Ed\u学生使用printf“\r$1${sp:sc++:1}”
而不是在spin
函数中,我相信是这样。当旋转的单词很长时spin“下载那个东西ok”
然后我们停止它,endspin“success”
,当旋转结束时,它将有输出:“成功完成那件事ok”太棒了!我宁愿采用这种方法。然而,我在while循环中调用微调器函数。它最初按预期旋转两秒钟,然后显示“waitwaitwaitwaitwait…”。我怎样才能解决这个问题?