Mieux vaut tard que jamais, dit le vieux motard qu'elle aimait...
J'ai cherché le fil en français pour le script de barre de transmission dont
Fabrice est l'auteur et auquel Argolance a contribué; j'aurais rabouté mon
script à ce fil. Mais motte, rien trouvé.
Donc je dois créer ce nouveau fil pour ma trouvaille.
Flanquez les deux scripts ci-dessous dans un chemin d'exécutables,
disons, /root/my-applications/bin.
Maintenant supposons que vous voulez voir le progrès de l'opération:
Code: Select all
lzip -fk2 puduansave-HaveCharacter3.2fs
Code: Select all
lanceur-ligne-de-points.sh o lzip -fk2 puduansave-HaveCharacter3.2fs
sinon marquer le temps qui passe. Notez aussi qu'il ne s'arrête, une fois
lancé, qu'en plaçant un fichier bidon nommé « stop » dans /tmp.
Ex.
Code: Select all
>/tmp/stop
sujet de ces deux scripts, n'hésitez pas à me les poser ci-dessous. Mais
prenez la peine de lire les commentaires dans les scripts avant, s.v.p.
À+
~~~~~~~~~~~~~~~~~~
Code: Select all
#!/bin/bash
# /opt/local/bin/lanceur-ligne-de-points.sh
#
# Objectif : intégrer une ligne de progrès à une commande
# ---------- qui prend du temps à s'exécuter.
#
# Requiert : ligne-de-points.sh
#
# Usage : lanceur-ligne-de-points.sh < caractère pour marquer le progrès >
# < commande > < ses paramètres >.
#
# Important : le caractère marquant le progrès doit être en position 1
# ----------- sur la lighe de commande.
#
# Exemples :
# lanceur-ligne-de-points.sh o lzip -fk2 puduansave-HaveCharacter3.2fs
# lanceur-ligne-de-points.sh . rsync -avz puduansave-HaveCharacter3.2fs /mnt/sdb2
#
# (c) musher0, 3 avril 2019. GPL3
####
# Préparation
Q="$@"
# de la commande
long="${#Q}" # echo $long
CmD="${Q:2:$long}" # echo $CmD
# de la ligne de progrès
P="${Q:0:1}" # echo $P
TrnsP="tr -tint NavajoWhite1 -sh 67"
ClR="fg gold -bg Sienna4 -cr snow"
GeoM="g 42x6-111+111"
AutreS="sb -b 25 -bc -uc -bl"
# Attention : le paramètre < -bl > empêche toute interaction
# ----------- avec cette console.
FadE="fade 70 -fadecolor "#94A495"" # Effet tamisé.
# Action
urxvt -$TrnsP -$FadE -$ClR -$GeoM +$AutreS -e ligne-de-points.sh $P &
$CmD
>/tmp/stop # Commutateur pour ligne-de-points.sh,
# ---------- nécessaire avec le param. < -bl > d'urxvt.
Code: Select all
#!/bin/ash
# /opt/local/bin/ligne-de-points.sh
#
# Objectif -- Imprimer dans le terminal une ligne
# ------------- de points pendant un long processus.
#
# Usage -- Incorporer sur une ligne convenable du script
# ------------ principal, en arrière-plan, JUSTE AVANT
# ------------ la commande lançant le long processus.
#
# Exemple -- < ligne-de-points.sh & # Noter l'importante éperluette !
# --------------- < cp -f Gargantuesque_Fichier Répertoire_de_Destination
#
# Inspiré des idées exposées à
# https://stackoverflow.com/questions/238073/ \
# how-to-add-a-progress-bar-to-a-shell-script.
# Relevé le 14 mars 2019 en soirée.
#
# (c) musher0, 15 mars 2019. GPL3.
####
# Préparation
P="$1"
[ "$P" = "" ] && P="."
StoP () { if [ -f /tmp/stop ];then break;exit;fi ; }
# Commutateur
rm -f /tmp/stop # Ce drapeau ne doit pas exister au départ. On
# peut le créer à partir d'une autre console ou d'un gest. de fen.
echo -e "\t\e[1;4;32mProgrès de l'opération\e[0m"
for j in `seq 10`;do # Minutes
for i in `seq 40`;do # Secondes
# « `seq 30` » ici et « sleep 2s » ci-dessous = 30 fois par minute,
# c.-à-d. un point toutes les deux secondes.
#
# Si on veut voir apparaître un point à toutes les secondes,
# mettre « `seq 60` » ici, et « sleep 1s » à la ligne ci-dessous.
#
# P="."
# On peut mettre autre chose qu'un point, le caractère « ~ », par ex.
/bin/echo -ne "$P" # Utilise l'utilitaire echo et non la fonction de bash.
# Le paramètre < -n > signifie : « Imprime la chaîne suivante sur la même ligne. »
#
# Le paramètre < -e > signifie : « Accepte les séquences ANSI ». Car
# on peut colorer cette ligne à partir du script principal en spécifiant
# des séquences de couleur ANSI.
#
# Par ex., envoyer la commande < echo - "\e[33m" > avant de passer la
# main au présent script fera qu'il imprimera des points de couleur or. En soi,
# le présent script adopte les couleurs par défaut de la console qui le lance.
#
sleep 1.5s # 2s # 1s
StoP
done
echo -e "\e[1L\e[K\e[1A"
# Le code ANSI « Échapp. 1 L » pousse d'une ligne vers le bas
# l'écriture qu'il pourrait déjà y avoir sur une nouvelle ligne dont
# la ligne de progrès aurait besoin.
StoP
done
echo -e "\e[0m" # En-cas pour la fin, afin d'éviter du barbouillage dans
# la console. Annule les séquences de couleur ANSI si le script principal
# en a utilisé. En d'autres mots, cette commande restaure les couleurs
# de départ de la console.