web-dev-qa-db-fra.com

Comment créer une animation de rotation à l'aide d'un script shell?

Je recherche un script qui crée une animation de rotation utilisant le caractère /, -, | et \.

Si vous passez continuellement entre ces caractères, il devrait ressembler à sa rotation. Comment faire cela?

8

Utilisez ce script:

#!/bin/bash

chars="/-\|"

while :; do
  for (( i=0; i<${#chars}; i++ )); do
    sleep 0.5
    echo -en "${chars:$i:1}" "\r"
  done
done

La boucle while a une durée infinie. La boucle for parcourt chaque caractère de la chaîne indiquée dans $chars. echo imprime le caractère avec un retour à la carrosserie \r, mais sans saut de ligne -n. -e force echo à interpréter les séquences d'échappement telles que \r. Il y a un délai de 0,5 seconde entre chaque changement.

19
chaos

Voici un exemple utilisant \b, qui indique à l'émulateur de terminal de déplacer le curseur d'une colonne à gauche, afin de continuer à écraser le même caractère à plusieurs reprises.

#!/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'

Voir BashFAQ 34 pour plus d'informations.

19
geirha

Puisque vous ne demandez pas explicitement bash, un petit bouchon pour le poisson-coquille , où cela peut être résolu à merveille IMO:

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

Dans ce cas, symbols est une variable de tableau et son contenu s’il est pivoté/décalé, car $symbols[2..-1] sont toutes des entrées à l’exception de la première.

1
Pompei2