2012-05-06 89 views

回答

2

接受的解決方案過於複雜。你可以這樣做:

while sleep 1; do 
    i=$((++i%4 + 2)); 
    printf '\b|/-\' | cut -b 1,$i | tr -d '\n'; 
done 

(請注意,一秒睡覺是不可移植的,也不是起)

+0

謝謝。這很棒。我需要嘗試一下這個解決方案,並且一旦我從我的會議中解脫出來就會明白它的工作原理。 – user419534

2
echo -e 'abc\bd' 
      ^^---backspace char 

將輸出

abd 

所以基本上你想輸出你的動畫字符之一,那麼輸出退格,然後輸出下一個字符,等等

+0

你需要'-e'選項來'echo'。 – huon

+0

哎呀,對。謝謝。編輯答案 –

4

大廈馬克B的回答,下面是一個簡單的演示:

spin() { 

    chars="|/– \\" 

    rotations=3 

    delay=0.1 

    for i in `seq 0 $rotations`; do 

    for char in $chars; do 

     echo -ne $char 
     sleep $delay 
     echo -ne '\b' 

    done 

    done 

} 

將它粘貼到您的終端並鍵入'旋轉'。


更新:此版本同時適用於bash和zsh。

spin() { 

    char=(\|/– \\) 

    charLastIndex=3 

    rotations=3 

    delay=0.1 

    for i in `seq 1 $rotations`; do 

    for j in `seq 0 $charLastIndex`; do 

     echo -n ${char[$j]} 
     sleep $delay 
     echo -ne '\b' 

    done 

    done 

} 

更新:liori的版本可以在多個殼。

spin() { 
    rotations=3 
    delay=0.1 
    for i in `seq 0 $rotations`; do 
    for char in '|' '/' '-' '\'; do 
     #'# inserted to correct broken syntax highlighting 
     echo -n $char 
     sleep $delay 
     printf "\b" 
    done 
    done 
} 
+0

注意:在bash中工作,但不在zsh中。 – liori

+0

@liori,你知道一種讓回聲在zsh中行爲的方法,或者一種解決方法嗎?它似乎包括回聲後的部分提示。 –

+0

嗯,zsh不喜歡空間作爲字段分隔符。 –

0

這裏是POSIX外殼符合版本:

while true; do for x in '|' '/' '-' '\'; do printf '\b$x'; sleep 1; done; done 

注意,如副作用您的價值x將被覆蓋。爲了避免這種附帶說明的功能。

0

既然你不指定外殼,爲fish shell,在此可以很優雅地使用數組來完成一個小插件:

set -l symbols ◷ ◶ ◵ ◴ 
while sleep 0.5 
    echo -e -n "\b$symbols[1]" 
    set -l symbols $symbols[2..-1] $symbols[1] 
end 

在這種情況下,symbols是一個數組變量,並將內容如果它被旋轉/移位,因爲$symbols[2..-1]都是條目,但是第一個。