Sto cercando uno script che crea un'animazione rotazione con carattere /
, -
, |
e \
.
Se si cambia continuamente tra questi personaggi, dovrebbe apparire come se ruotasse. Come farlo?
Sto cercando uno script che crea un'animazione rotazione con carattere /
, -
, |
e \
.
Se si cambia continuamente tra questi personaggi, dovrebbe apparire come se ruotasse. Come farlo?
Risposte:
Usa quello script:
#!/bin/bash
chars="/-\|"
while :; do
for (( i=0; i<${#chars}; i++ )); do
sleep 0.5
echo -en "${chars:$i:1}" "\r"
done
done
Il while
ciclo è infinito. Il for
ciclo scorre attraverso ogni carattere della stringa fornita $chars
. echo
stampa il personaggio, con un ritorno a \r
capo, ma senza interruzione di riga -n
. -e
forza l'eco per interpretare sequenze di escape come \r
. C'è un ritardo di 0,5 secondi tra ogni modifica.
echo
... ma ovviamente printf
funziona anche. ^^
Ecco un esempio usando \b
, che dice all'emulatore di terminale di spostare il cursore di una colonna a sinistra, per continuare a sovrascrivere lo stesso carattere più volte.
#!/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'
Vedi BashFAQ 34 per di più.
spinner &
, memorizzerei il pid in una variabile locale spinner_pid=$!
e poi sostituivo la chiamata di kill $spinner_pid &>/dev/null
tput civis #hide cursor
etput cnorm #show cursor
Dal momento che non chiedi esplicitamente bash, una piccola spina per il guscio di pesce , dove questo può essere risolto magnificamente IMO:
set -l symbols ◷ ◶ ◵ ◴
while sleep 0.5
echo -e -n "\b$symbols[1]"
set -l symbols $symbols[2..-1] $symbols[1]
end
In questo caso, symbols
è una variabile di matrice e il contenuto se viene ruotato / spostato, perché $symbols[2..-1]
sono tutte le voci tranne la prima.
printf "%s\r" "${chars:$i:1}"
?