ฉันกำลังมองหาสคริปต์ที่สร้างภาพเคลื่อนไหวการหมุนโดยใช้ตัวละคร/, -, และ|\
หากคุณสลับไปมาระหว่างตัวละครเหล่านี้อย่างต่อเนื่องมันควรจะมีลักษณะหมุนได้ ทำอย่างไร
ฉันกำลังมองหาสคริปต์ที่สร้างภาพเคลื่อนไหวการหมุนโดยใช้ตัวละคร/, -, และ|\
หากคุณสลับไปมาระหว่างตัวละครเหล่านี้อย่างต่อเนื่องมันควรจะมีลักษณะหมุนได้ ทำอย่างไร
คำตอบ:
ใช้สคริปต์นั้น:
#!/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 พิมพ์ตัวอักษรที่มีการกลับรถแต่ไม่มี LINEBREAK กองกำลังสะท้อนการตีความลำดับหนีเช่น มีความล่าช้า 0.5 วินาทีระหว่างการเปลี่ยนแปลงแต่ละครั้ง$charsecho\r-n-e\r
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 call ด้วย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}"?