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 whileSchleife läuft unendlich. Die forSchleife durchläuft jedes Zeichen der in angegebenen Zeichenfolge $chars. echodruckt das Zeichen mit einem Wagenrücklauf \r, jedoch ohne Zeilenumbruch -n. -ezwingt das Echo, Escape-Sequenzen wie z \r. Zwischen jeder Änderung liegt eine Verzögerung von 0,5 Sekunden.
echo... aber printffunktioniert 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 symbolshandelt 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}"?