2012-05-06 10 views

Antwort

2

Die akzeptierte Lösung ist übermäßig kompliziert. Sie können einfach tun:

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

(Beachten Sie, dass Subsekunden Schlaf nicht tragbar ist, und weder ist f.)

+0

Danke. Es ist großartig. Ich muss diese Lösung ausprobieren und werde verstehen, wie es funktioniert, sobald ich von meinem Treffen frei bin. – user419534

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

ausgeben wird

abd 

Sie also im Grunde würde Ausgang eines Ihrer Animation Zeichen, dann Ausgang ein Backspace, dann gibt das nächste Zeichen, etc ...

+0

Sie benötigen die Option '-e' um' echo' zu verwenden. – huon

+0

Whoops, richtig. Vielen Dank. Bearbeiten der Antwort –

4

Aufbauend auf Marc B's Antwort, hier ist eine einfache Demo:

Fügen Sie es in Ihr Terminal und geben Sie "Spin".


Update: Diese Version funktioniert in bash und 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 

} 

Update: Liori Version arbeitet in mehreren Schalen.

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

Hinweis: funktioniert in bash, aber nicht in zsh. – liori

+0

@liori, wissen Sie von einer Möglichkeit, Echo in zsh, oder eine Umgehung zu erhalten? Es scheint einen Teil der Eingabeaufforderung nach dem Echo zu enthalten. –

+0

Hmm, zsh mag keinen Platz als Feldtrenner. –

0

Hier ist POSIX-Shell-konform Version:

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

Beachten Sie, dass als Nebeneffekt Ihr Wert von x wird außer Kraft gesetzt. Um dies zu vermeiden, schließen Sie Anweisungen in die Funktion ein.

0

Da Sie nicht angeben, welche Shell, ein wenig Stecker für die fish shell, wo das sehr elegant Arrays durchgeführt werden kann:

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

In diesem Fall symbols ist ein Array-Variable, und den Inhalt wenn es gedreht/verschoben wird, weil $symbols[2..-1] alle Einträge sind, aber der erste.

Verwandte Themen