Шукаю скрипт , який створює анімацію обертання з допомогою символу /
, -
, |
і \
.
Якщо ви постійно перемикаєтесь між цими символами, це має виглядати як його обертовий. Як це зробити?
Шукаю скрипт , який створює анімацію обертання з допомогою символу /
, -
, |
і \
.
Якщо ви постійно перемикаєтесь між цими символами, це має виглядати як його обертовий. Як це зробити?
Відповіді:
Використовуйте цей сценарій:
#!/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
змушує відлуння для інтерпретації послідовностей втечі, таких як \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 &
я б зберігав pid у локальній змінній, spinner_pid=$!
а потім замінював виклик kill наkill $spinner_pid &>/dev/null
tput civis #hide cursor
іtput cnorm #show cursor
Оскільки ви прямо не просите баш, трохи штепсельної шкаралупи для рибної шкаралупи , де це можна красиво вирішити 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}"
?