制作函数来显示运行进度并在完成时替换行

制作函数来显示运行进度并在完成时替换行

我想显示安装步骤仍在进行中。所以我会每秒向当前行添加一个点。

是否可以为此创建一个函数,以便我可以将此进度函数添加到每个安装步骤中?

#!/bin/bash
echo "Step 1: Apt-get update"
while :;do echo -n .;sleep 1;done &
trap "kill $!" EXIT
sudo apt-get update 2>&1 >/dev/null
kill $! && trap " " EXIT

echo "Step 2: Apt-get upgrade"
sudo apt-get upgrade -y 2>&1 >/dev/null
# Also show progress

如果进度已完成,我想将当前行替换为

Step 1: Apt-get update finished

然后下一步将运行...

答案1

如果您可以将所有进度信息保留在同一行,则可以使用\r以下方法:

#!/bin/bash

echo -n "Step 1: Apt-get update"
while :;do echo -n .;sleep 1;done &
trap "kill $!" EXIT
sudo apt-get update 2>&1 >/dev/null
kill $! && trap " " EXIT
echo -e "\rStep 1: Apt-get update finished"

这会将句点显示在与“步骤 1...”相同的行上,然后将该行替换为“完成”消息。您可能需要在“finished”后面的引号内添加空格以覆盖所有点;您可能还想计算点的数量,并避免换行(通过跟踪与 相比输出的数量$COLUMNS)。

我强烈建议您将 logapt-get的输出记录到文件中,而不是完全丢弃它。特别是在这种upgrade情况下,您需要输出来解决可能发生的任何错误......

一种更简单的方法是使用apt而不是apt-get:它显示漂亮的进度条并在完成后将其干净地删除。

相关内容