我想显示安装步骤仍在进行中。所以我会每秒向当前行添加一个点。
是否可以为此创建一个函数,以便我可以将此进度函数添加到每个安装步骤中?
#!/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
:它显示漂亮的进度条并在完成后将其干净地删除。