2015-07-19 57 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'函數中。 –