2012-05-06 15 views
6

में मैं एक खोल स्क्रिप्ट लिखना चाहता हूं जो स्थापना से संबंधित कार्य करता है। मैं प्रिंटिंग वर्णों द्वारा घूर्णन सर्कल जैसे कुछ आइकन दिखाना चाहता हूं।, /, \, -। एक बार जब इंस्टॉलेशन पूरा हो जाए तो यह सर्कल गायब हो जाएगा। इस मुद्दे पर किसी प्रकार की मदद की सराहना की जाएगी।अक्षरों का उपयोग करके घुमावदार सर्कल बनाना |, /, , - खोल स्क्रिप्ट

उत्तर

2

स्वीकृत समाधान अत्यधिक जटिल है। तुम सिर्फ कर सकते हैं:

while sleep 1; do 
    i=$((++i%4 + 2)); 
    printf '\b|/-\' | cut -b 1,$i | tr -d '\n'; 
done 

(ध्यान दें कि subsecond सो पोर्टेबल नहीं है, और न seq है।)

+0

धन्यवाद। यह बहुत अच्छा है। मुझे इस समाधान को आजमाने की ज़रूरत है और यह समझ जाएगा कि जब मैं अपनी बैठक से मुक्त हूं तो यह कैसे काम करता है। – user419534

2
echo -e 'abc\bd' 
      ^^---backspace char 

इच्छा उत्पादन

abd 
तो मूल रूप से

आप उत्पादन अपने एनीमेशन वर्ण में से एक है, तो उत्पादन एक बैकस्पेस, तो उत्पादन अगले चार, आदि ...

+0

आपको 'echo'' के लिए '-e' विकल्प चाहिए। – huon

+0

ओह, ठीक है। धन्यवाद। संपादन उत्तर –

4

मार्क पर बिल्डिंग होगी बी का जवाब, यहां एक साधारण डेमो है:

spin() { 

    chars="|/– \\" 

    rotations=3 

    delay=0.1 

    for i in `seq 0 $rotations`; do 

    for char in $chars; do 

     echo -ne $char 
     sleep $delay 
     echo -ne '\b' 

    done 

    done 

} 

इसे अपने टर्मिनल में पेस्ट करें और 'स्पिन' टाइप करें।


अद्यतन: यह संस्करण दोनों बैश और zsh में काम करता है।

spin() { 

    char=(\|/– \\) 

    charLastIndex=3 

    rotations=3 

    delay=0.1 

    for i in `seq 1 $rotations`; do 

    for j in `seq 0 $charLastIndex`; do 

     echo -n ${char[$j]} 
     sleep $delay 
     echo -ne '\b' 

    done 

    done 

} 

अद्यतन: liori के संस्करण कई गोले में काम करता है।

spin() { 
    rotations=3 
    delay=0.1 
    for i in `seq 0 $rotations`; do 
    for char in '|' '/' '-' '\'; do 
     #'# inserted to correct broken syntax highlighting 
     echo -n $char 
     sleep $delay 
     printf "\b" 
    done 
    done 
} 
+0

नोट: बैश में काम करता है, लेकिन zsh में नहीं। – liori

+0

@ लिओरी, क्या आप zsh, या वर्कअराउंड में व्यवहार करने के लिए गूंज पाने के तरीके के बारे में जानते हैं? ऐसा लगता है कि गूंज के बाद प्रॉम्प्ट का हिस्सा शामिल है। –

+0

हम्म, zsh को फ़ील्ड विभाजक के रूप में स्थान पसंद नहीं है। –

0

यहाँ POSIX खोल अनुरूप है संस्करण:

while true; do for x in '|' '/' '-' '\'; do printf '\b$x'; sleep 1; done; done 

के रूप में है कि नोट साइड इफेक्ट x का आपका मान ओवरराइड हो जाएगा। समारोह में इस संलग्न निर्देश से बचने के लिए।

0

जब से तुम जो खोल, fish shell, जहां यह काफी सुंदर ढंग से किया जा सकता है सरणियों प्रयोग करने के लिए एक छोटे से प्लग निर्दिष्ट नहीं करते हैं:

set -l symbols ◷ ◶ ◵ ◴ 
while sleep 0.5 
    echo -e -n "\b$symbols[1]" 
    set -l symbols $symbols[2..-1] $symbols[1] 
end 

इस मामले में, symbols एक सरणी चर रहा है, और सामग्री यदि यह घुमाया गया है/स्थानांतरित किया गया है, क्योंकि सभी प्रविष्टियां हैं लेकिन पहले हैं।

संबंधित मुद्दे