Como criar uma animação de rotação usando o script de shell?

8

Estou procurando um script que crie uma animação de rotação usando o caractere / , - , | e \ .

Se você alternar continuamente entre esses caracteres, ele deve se parecer com a rotação. Como fazer isso?

    
por Anonymous Platypus 15.05.2015 / 07:52

3 respostas

19

Use esse script:

#!/bin/bash

chars="/-\|"

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

O loop while é executado infinitamente. O loop for é executado através de cada caractere da string dada em $chars . echo imprime o caractere, com um retorno de carro \r , mas sem linebreak -n . -e forces echo para interpretar seqüências de escape como \r . Há um atraso de 0,5 segundos entre cada alteração.

    
por chaos 15.05.2015 / 08:58
19

Aqui está um exemplo usando \b , que diz ao emulador de terminal para mover o cursor uma coluna para a esquerda, para continuar sobrescrevendo o mesmo caractere várias vezes.

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

Veja BashFAQ 34 para mais.

    
por geirha 15.05.2015 / 09:59
1

Desde que você não peça explicitamente por bash, um pequeno plug para o fish shell , onde isso pode ser resolvido lindamente IMO:

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

Nesse caso, symbols é uma variável de matriz e o conteúdo, se for girado / deslocado, porque $symbols[2..-1] são todas as entradas, exceto a primeira.

    
por Pompei2 25.09.2017 / 22:30