Ищу скрипт , который создает анимацию вращения с помощью символа /
, -
, |
и \
.
Если вы постоянно переключаетесь между этими символами, это должно выглядеть как вращение. Как это сделать?
Ищу скрипт , который создает анимацию вращения с помощью символа /
, -
, |
и \
.
Если вы постоянно переключаетесь между этими символами, это должно выглядеть как вращение. Как это сделать?
Ответы:
Используйте этот скрипт:
#!/bin/bash
chars="/-\|"
while :; do
for (( i=0; i<${#chars}; i++ )); do
sleep 0.5
echo -en "${chars:$i:1}" "\r"
done
done
while
Цикл выполняется бесконечно. В for
запускает цикл корыта каждый символ строки заданной в $chars
. echo
печатает символ с возвратом каретки \r
, но без переноса строки -n
. -e
заставляет эхо интерпретировать escape-последовательности, такие как \r
. Между каждым изменением задержка составляет 0,5 секунды.
echo
... но, конечно, printf
тоже работает. ^^
Вот пример использования \b
, который говорит эмулятору терминала перемещать курсор на один столбец влево, чтобы продолжать перезаписывать один и тот же символ снова и снова.
#!/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'
Смотрите BashFAQ 34 для более.
spinner &
я spinner_pid=$!
kill $spinner_pid &>/dev/null
tput civis #hide cursor
иtput cnorm #show cursor
Так как вы явно не просите bash, небольшой плагин для рыбной раковины , где это можно красиво решить IMO:
set -l symbols ◷ ◶ ◵ ◴
while sleep 0.5
echo -e -n "\b$symbols[1]"
set -l symbols $symbols[2..-1] $symbols[1]
end
В данном случае symbols
это переменная массива, а содержимое, если оно вращается / сдвигается, потому что $symbols[2..-1]
это все записи, кроме первой.
printf "%s\r" "${chars:$i:1}"
?