如何打印与bash脚本中的进度相同的行

时间:2017-04-08 10:33:52

标签: bash

我想以下列方式打印文本

Waiting for completion.
Waiting for completion..
Waiting for completion...

[注意:不超过三个点]

以上内容应该在同一行和循环中。

当循环条件为假时,我想在同一行中得到以下内容:

Waiting for completion... [OK]

如何在bash脚本中实现此目的?

3 个答案:

答案 0 :(得分:2)

你应该使用回车。在echo中搜索关于\ r。

的信息 例如,你可能想要这样的东西:

f(x)

你需要睡觉,如果你不睡觉,你就不能看到变化的点。

答案 1 :(得分:1)

这个怎么样:

#!/usr/bin/env bash

trap ctrl_c INT

ctrl_c()
{
    flag=1
}

dots()
{
    if [ "$1" -eq 1 ]
    then
    echo .
    fi
    if [ "$1" -eq 2 ]
    then
    echo ..
    fi
    if [ "$1" -eq 3 ]
    then
    echo ...
    fi
}


flag=0

dots_count=1

while [ "$flag" -eq 0 ]
do
    if [ "$dots_count" -eq 4 ]
    then
    dots_count=1
    fi

    printf "\r%sWaiting for completion%s" "$(tput el)" "$(dots "$dots_count")"
    dots_count=$((dots_count + 1))
    sleep 1
done



printf "\r%sWaiting for completion... [OK]\n" "$(tput el)"

它将持续打印Waiting for completion,然后打印 同一行中的三个点。当 Control - c 时 然后按下"Waiting for completion... [OK]"将被打印。

答案 2 :(得分:1)

使用echo的“ -n”开关

下一个回显将在同一行上打印