Eu estou procurando um script que cria uma animação de rotação usando caráter /
, -
, |
e \
.
Se você alternar continuamente entre esses caracteres, deve parecer que está girando. Como fazer isso?
Eu estou procurando um script que cria uma animação de rotação usando caráter /
, -
, |
e \
.
Se você alternar continuamente entre esses caracteres, deve parecer que está girando. Como fazer isso?
Respostas:
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 while
loop corre infinito. O for
loop passa por cada caractere da string fornecida em $chars
. echo
imprime o caractere, com um retorno de carro \r
, mas sem quebra de linha -n
. -e
força o eco a interpretar seqüências de escape como \r
. Há um atraso de 0,5 segundos entre cada alteração.
echo
... mas é claro que printf
também funciona. ^^
Aqui está um exemplo de uso \b
, que diz ao emulador de terminal para mover o cursor uma coluna para a esquerda, a fim de continuar substituindo o mesmo caractere repetidamente.
#!/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.
spinner &
, eu iria armazenar o PID em uma variável local spinner_pid=$!
e, em seguida, substituir a chamada de matar comkill $spinner_pid &>/dev/null
Como você não solicita explicitamente o bash, um pequeno plug para a casca do peixe , onde isso pode ser resolvido lindamente na 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.
printf "%s\r" "${chars:$i:1}"
?