Шукаю скрипт , який створює анімацію обертання з допомогою символу /, -, |і \.
Якщо ви постійно перемикаєтесь між цими символами, це має виглядати як його обертовий. Як це зробити?
Шукаю скрипт , який створює анімацію обертання з допомогою символу /, -, |і \.
Якщо ви постійно перемикаєтесь між цими символами, це має виглядати як його обертовий. Як це зробити?
Відповіді:
Використовуйте цей сценарій:
#!/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}"?