Ich bin auf der Suche nach einem Skript , das eine Rotation Animation mit Charakter schafft /
, -
, |
und \
.
Wenn Sie kontinuierlich zwischen diesen Zeichen wechseln, sollte es so aussehen, als würde es sich drehen. Wie macht man das?
Ich bin auf der Suche nach einem Skript , das eine Rotation Animation mit Charakter schafft /
, -
, |
und \
.
Wenn Sie kontinuierlich zwischen diesen Zeichen wechseln, sollte es so aussehen, als würde es sich drehen. Wie macht man das?
Antworten:
Verwenden Sie dieses Skript:
#!/bin/bash
chars="/-\|"
while :; do
for (( i=0; i<${#chars}; i++ )); do
sleep 0.5
echo -en "${chars:$i:1}" "\r"
done
done
Die while
Schleife läuft unendlich. Die for
Schleife durchläuft jedes Zeichen der in angegebenen Zeichenfolge $chars
. echo
druckt das Zeichen mit einem Wagenrücklauf \r
, jedoch ohne Zeilenumbruch -n
. -e
zwingt das Echo, Escape-Sequenzen wie z \r
. Zwischen jeder Änderung liegt eine Verzögerung von 0,5 Sekunden.
echo
... aber printf
funktioniert natürlich auch. ^^
Hier ist ein Beispiel mit \b
, das den Terminalemulator anweist, den Cursor eine Spalte nach links zu bewegen, um das gleiche Zeichen immer wieder zu überschreiben.
#!/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'
Weitere Informationen finden Sie in BashFAQ 34 .
spinner &
würde ich die PID in einer lokalen Variablen speichern spinner_pid=$!
und dann den Kill-Aufruf durchkill $spinner_pid &>/dev/null
Da Sie nicht explizit nach Bash fragen, ein kleiner Stecker für die Fischschale , wo dies wunderbar gelöst werden kann IMO:
set -l symbols ◷ ◶ ◵ ◴
while sleep 0.5
echo -e -n "\b$symbols[1]"
set -l symbols $symbols[2..-1] $symbols[1]
end
In diesem Fall symbols
handelt es sich um eine Array-Variable und den Inhalt, wenn sie gedreht / verschoben wird, da $symbols[2..-1]
alle Einträge außer dem ersten sind.
printf "%s\r" "${chars:$i:1}"
?