2015-07-19 69 views
2

我目前在学习如何使脚本更加冗长。下面的代码显示了一个微调器。但是,我很难修改这个微调以获得“下载”等字样。我希望词语和微调词都能出现在彼此旁边。我不是问如何实现微调来取得进展,而是如何与单词连接。怎么能实现这个目标?在Bash中模拟微调进度

sp='/-\|' 
sc=0 
spin() { 
    printf "\b${sp:sc++:1}" 
    ((sc==${#sp})) && sc=0 
} 
endspin() { 
    printf "\r%s\n" "[email protected]" 
} 

until work_done; do 
    spin 
    some_work ... 
done 
endspin 

回答

2

虽然我很佩服埃德和Jakuje的DIY精神,我也很喜欢重用其他人的代码。如果您宁愿回收再利用,请考虑Louis Marascio's spinner。我把他的spinner()功能到我的壳库,它是易于使用:

#!/bin/bash 

. lib.sh 

run_10s & 

echo -n wait 
spinner $! 

echo -e "\rdone" 

显示

$ ./test_lib 
wait [/] 

10秒钟微调旋转,然后将其清除左含wait\r该行而你只剩下

$ ./test_lib 
done 
$ 

在屏幕上。

+0

太棒了!我宁愿采用这种方法。但是,我在一个while循环中调用了spinner函数。它最初按预定工作两秒钟,然后显示“waitwaitwaitwaitwaitwaitwaitwaitwaitwaitwait ...”。我该如何解决这个问题? –

5

你可以这样做,这样

sp='/-\|' 
sc=0 
spin() { 
    printf "\r${sp:sc++:1} $1" 
    ((sc==${#sp})) && sc=0 
} 
endspin() { 
    printf "\r%s\n" "[email protected]" 
} 
work_done() { 
    false 
} 
some_work() { 
    sleep 1 
} 

until work_done; do 
    spin "Downloading" 
    some_work ... 
done 
endspin 
+0

可以将单词“下载”放在微调器之前吗? –

+0

@Code_Ed_Student使用'printf'\ r $ 1 $ {sp:sC++:1}''而不是在'spin'函数中。 –