Saya mencari script yang menciptakan animasi rotasi menggunakan karakter /
, -
, |
dan \
.
Jika Anda terus beralih di antara karakter-karakter ini, ia akan terlihat seperti berputar. Bagaimana cara membuatnya?
Saya mencari script yang menciptakan animasi rotasi menggunakan karakter /
, -
, |
dan \
.
Jika Anda terus beralih di antara karakter-karakter ini, ia akan terlihat seperti berputar. Bagaimana cara membuatnya?
Jawaban:
Gunakan skrip itu:
#!/bin/bash
chars="/-\|"
while :; do
for (( i=0; i<${#chars}; i++ )); do
sleep 0.5
echo -en "${chars:$i:1}" "\r"
done
done
The while
loop berjalan tak terbatas. The for
loop berjalan palung setiap karakter dari string yang diberikan dalam $chars
. echo
mencetak karakter, dengan carriage return \r
, tetapi tanpa linebreak -n
. -e
memaksa gema untuk menafsirkan urutan melarikan diri seperti \r
. Ada penundaan 0,5 detik antara setiap perubahan.
echo
... tapi tentu saja printf
berhasil juga. ^^
Berikut ini contoh penggunaan \b
, yang memberi tahu emulator terminal untuk memindahkan kursor satu kolom ke kiri, agar terus menimpa karakter yang sama berulang kali.
#!/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'
Lihat BashFAQ 34 untuk lebih lanjut.
spinner &
, saya akan menyimpan pid dalam variabel lokal spinner_pid=$!
dan kemudian mengganti panggilan kill dengankill $spinner_pid &>/dev/null
Karena Anda tidak secara eksplisit meminta bash, sebuah sumbat kecil untuk cangkang ikan , tempat ini dapat diselesaikan dengan indah IMO:
set -l symbols ◷ ◶ ◵ ◴
while sleep 0.5
echo -e -n "\b$symbols[1]"
set -l symbols $symbols[2..-1] $symbols[1]
end
Dalam hal ini, symbols
adalah variabel array, dan isinya jika diputar / digeser, karena $symbols[2..-1]
semua entri tetapi yang pertama.
printf "%s\r" "${chars:$i:1}"
?