2015-07-19 1 views
2

J'apprends actuellement à rendre les scripts un peu plus verbeux. Le code ci-dessous montre un spinner. Cependant, j'ai des difficultés à modifier ce spinner pour avoir les mots tels que «Téléchargement». Je veux que les deux mots et spinner apparaissent l'un à côté de l'autre. Je ne demande pas comment implémenter spinner pour le progrès mais comment concaténer avec les mots. Comment pourrait-on atteindre cet objectif?Simuler un spinner pour progresser en Bash

sp='/-\|' 
sc=0 
spin() { 
    printf "\b${sp:sc++:1}" 
    ((sc==${#sp})) && sc=0 
} 
endspin() { 
    printf "\r%s\n" "[email protected]" 
} 

until work_done; do 
    spin 
    some_work ... 
done 
endspin 

Répondre

2

Alors que j'admire l'esprit de bricolage de Ed et Jakuje J'aime aussi réutiliser le code d'autres folks. Si vous préférez recycler que recréer envisager Louis Marascio's spinner. Je mets sa fonction spinner() dans ma bibliothèque shell et il est facile à utiliser:

#!/bin/bash 

. lib.sh 

run_10s & 

echo -n wait 
spinner $! 

echo -e "\rdone" 

affiche

$ ./test_lib 
wait [/] 

pendant 10 secondes avec la rotation de la centrifugeuse, puis il efface cette ligne gauche contenant wait avec le \r et il vous reste seulement

$ ./test_lib 
done 
$ 

sur l'écran.

+0

Super! Je préfère aller avec cette approche. Cependant, j'appelle la fonction spinner dans une boucle while. Il fonctionne initialement comme prévu pendant deux secondes, puis il affiche "waitwaitwaitwaitwaitwaitwaitwaitwaitwaitwaitwaitwaitwait ...". Comment puis-je résoudre ce problème? –

5

Vous pouvez le faire comme ça

sp='/-\|' 
sc=0 
spin() { 
    printf "\r${sp:sc++:1} $1" 
    ((sc==${#sp})) && sc=0 
} 
endspin() { 
    printf "\r%s\n" "[email protected]" 
} 
work_done() { 
    false 
} 
some_work() { 
    sleep 1 
} 

until work_done; do 
    spin "Downloading" 
    some_work ... 
done 
endspin 
+0

Est-ce que les mots "Téléchargement" pouvaient précéder le fileur? –

+0

@Code_Ed_Student Utilisez 'printf" \ r $ 1 $ {sp: sC++: 1} "' à la place dans la fonction 'spin' pour ce que je crois. –