好吧,因此在bash
或其他我可以知道的shell中没有本地工具,但是您可以使用下面的这个printf
&这个自定义函数来实现你所需要的。这个小片段将打印安装进度条,您可以通过正常功能调用printProgressBar
在您想要显示的脚本的各个位置进行打印。
function printProgressBar() {
local progressBar="."
printf "%s" "${progressBar}"
}
假设你在你的函数调用n
步骤,在插入之间的地方调用这个函数。是否有错误消息的实际打印,填写可变installOf
安装头从您的示例假设可采取任一"Installing OpenCv "
(或)"Installing Qt "
,步骤之前用它在该变量作为
installOf="Installing OpenCv "
printf "%s" "${installOf}"
和最终状态,因为你没有让我们知道你如何让安装的整体状态,假设你找到它,这取决于成功或失败,还更新了它另一个变量
installStatus="Success"
printf " [%s]\n" "${installStatus}"
所以把他们放在一起,我有这个运行20个调用函数的简单while循环,可以使用a类似的方式来采取您的脚本中的各个位置的函数调用。
installOf="Installing OpenCv "
function printProgressBar() {
local progressBar="."
printf "%s" "${progressBar}"
}
printf "%s" "${installOf}"
while ((cnt < 20))
do
((cnt++))
printProgressBar
sleep 1
done
# You can determine the status of your installation as your script demands
installStatus="Success"
printf " [%s]\n" "${installStatus}"
运行脚本产生类似于您的要求的结果的东西,
$ bash script.sh
Installing OpenCv .................... [Success]
观察到,每个.
代表一个函数调用的每个实例。
更新: -
看你的代码逻辑,你缺少的后台作业是如何工作的一个点。您的后台功能InstEssent
正在安装某个模块。要有效地使用进度栏,您需要不断轮询后台作业以查看它是否仍在使用kill -0 "$pid"
命令运行,如果它正在运行,请按照下面的代码所示打印安装栏。
function InstEssent()
{
sudo apt-get -y install build-essential
sleep 5
}
printf "%s" "${installOf}"
InstEssent &
pid_InstEssent="$!"
while kill -0 "$pid" 2> /dev/null
do
printProgressBar
sleep 1
done
我相信你在其他地方看到过这个,所以你为什么不认为这可能? –
你的代码在哪里? –
@Inian:对不起,我生病了,没有时间研究它。现在这样做,很快就会更新,对不起。 – Idanis