2012-05-06 14 views

Odpowiedz

2

Przyjęte rozwiązanie jest zbyt skomplikowane. Można po prostu zrobić:

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

(Zauważ, że subsekundową spania nie jest przenośny i nie jest nast.)

+0

Dziękuję. Wspaniale. Muszę wypróbować to rozwiązanie i zrozumieć, jak to działa, gdy jestem wolny od mojego spotkania. – user419534

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

wyjście wola

abd 

Więc w zasadzie, że wyjście jednego z animacji znaków, a następnie wyjście backspace, a następnie wyjście następnego char, itd ...

+0

Potrzebujesz opcji '-e' do' echo'. – huon

+0

Whoops, racja. dzięki. edycja odpowiedź –

4

Opierając się na Marc Odpowiedź B, oto prosta wersja demonstracyjna:

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 

} 

Wklej ją do terminalu i wpisz "spin".


Aktualizacja: ta wersja działa zarówno w bash, jak i 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 

} 

Aktualizacja: wersja liori za prace w wielu muszli.

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

Uwaga: działa w bash, ale nie w zsh. – liori

+0

@liori, czy znasz sposób na zachowanie echa w zsh lub obejście? Wygląda na to, że zawiera część pytania po echo. –

+0

Hmm, zsh nie lubi przestrzeni jako separatora pola. –

0

Oto zgodny POSIX powłoki wersja:

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

Zauważ, że jako efekt uboczny Twoja wartość x zostanie przesłonięta. Aby tego uniknąć, załącz instrukcje do funkcji.

0

Ponieważ nie określił których powłoka, trochę wtyczkę dla fish shell, gdzie może to być zrobione całkiem elegancko przy użyciu tablic:

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

w tym przypadku symbols jest zmienną tablicową i zawartość jeśli jest obrócony/przesunięty, ponieważ $symbols[2..-1] są wszystkie wpisy, ale pierwszy.

Powiązane problemy