2017-04-08 100 views
1

我想打印以下方式文本如何在同一行打印在bash脚本进度

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

[注:不超过三个点]

以上应在同一行和一个循环中。

当循环条件是假的我想在同一行下面还有:

Waiting for completion... [OK] 

如何在bash脚本实现这一目标?

+0

你是如何运行脚本?决定执行完成的条件是什么? – Inian

回答

2

您应该使用回车。在有关\ r的回声中搜索信息。

例如也许你想是这样的:

#!/bin/bash 

while [ 3 -gt 2 ]; 
do 
    echo -n -e 'Esperando.\r' 
    sleep 1 
    echo -n -e 'Esperando..\r' 
    sleep 1 
    echo -n -e 'Esperando...\r' 
    sleep 1 
    echo -n -e '    \r' 
done 

你需要,如果你不睡觉,你将无法观看变化点睡觉的原因。

+0

正在等待完成...在第三次迭代,然后没有发生变化 –

+0

Okey,抱歉,我不理解你,也许这就是你需要的。看我的答案。 – Serizba

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。当控制 - c是 按下然后"Waiting for completion... [OK]"将被打印。

+0

这是另一个很好的解决方案。为此+1。 –