Szukam skrypt, który tworzy animację obrotu za pomocą znaku /
, -
, |
i \
.
Jeśli ciągle przełączasz się między tymi postaciami, powinno to wyglądać, jakby się obracało. Jak to zrobić?
Szukam skrypt, który tworzy animację obrotu za pomocą znaku /
, -
, |
i \
.
Jeśli ciągle przełączasz się między tymi postaciami, powinno to wyglądać, jakby się obracało. Jak to zrobić?
Odpowiedzi:
Użyj tego skryptu:
#!/bin/bash
chars="/-\|"
while :; do
for (( i=0; i<${#chars}; i++ )); do
sleep 0.5
echo -en "${chars:$i:1}" "\r"
done
done
while
Pętla uruchamia nieskończona. W for
biegnie pętla koryta każdy znak w ciągu danego $chars
. echo
wypisuje znak ze znakiem powrotu karetki \r
, ale bez podziału linii -n
. -e
zmusza echo do interpretowania sekwencji ucieczki, takich jak \r
. Pomiędzy każdą zmianą występuje opóźnienie 0,5 sekundy.
echo
... ale oczywiście printf
też działa. ^^
Oto przykład użycia \b
, który mówi emulatorowi terminala, aby przesunął kursor o jedną kolumnę w lewo, aby ciągle nadpisywać ten sam znak.
#!/usr/bin/env bash
spinner() {
local i sp n
sp='/-\|'
n=${#sp}
printf ' '
while sleep 0.1; do
printf "%s\b" "${sp:i++%n:1}"
done
}
printf 'Doing important work '
spinner &
sleep 10 # sleeping for 10 seconds is important work
kill "$!" # kill the spinner
printf '\n'
Więcej informacji w BashFAQ 34 .
spinner &
spinner_pid=$!
kill $spinner_pid &>/dev/null
tput civis #hide cursor
itput cnorm #show cursor
Ponieważ nie pytasz wprost o bash, małą wtyczkę do skorupy ryby , gdzie można to pięknie rozwiązać IMO:
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ą, a zawartość, jeśli jest obrócona / przesunięta, ponieważ $symbols[2..-1]
są to wszystkie wpisy oprócz pierwszego.
printf "%s\r" "${chars:$i:1}"
?