Certains articles ont montré comment afficher la progression de la commande. Pour la calculer, vous devrez voir combien vous avez avancé. Sur les systèmes BSD, certaines commandes, telles que dd (1), acceptent un signal SIGINFO
et indiqueront leur progression. Sur les systèmes Linux, certaines commandes répondront de manière similaire à SIGUSR1
. Si cette fonctionnalité est disponible, vous pouvez rediriger votre entrée via _dd pour surveiller le nombre d'octets traités.
Alternativement, vous pouvez utiliser lsof pour obtenir le décalage du pointeur de lecture du fichier, et ainsi calculer la progression. Voici un exemple d'utilisation de lsof (1) pour voir la progression de wc (1) en train de lire un gros fichier nommé blob
.
$ wc -l blob &
[1] 3405769
$ lsof -w -o0 -o -c wc
COMMAND PID USER FD TYPE DEVICE OFFSET NODE NAME
[...]
wc 3405769 dds 3r REG 254,7 0t2656059392 7733716 blob
J'ai écrit une commande, nommée pmonitor, qui affiche la progression du traitement d'un processus ou fichier spécifié. Avec elle, vous pouvez faire des choses, comme ci-dessous.
$ pmonitor -c gzip
/home/dds/data/mysql-2015-04-01.sql.gz 58.06%
Une version antérieure des scripts shell Linux et FreeBSD apparaît sur mon blog ("Suivre la progression d'un processus sur Unix").
0 votes
Voir aussi stackoverflow.com/questions/12498304/… pour des exemples de la logique de contrôle (mettre un travail en arrière-plan et faire quelque chose jusqu'à ce qu'il se termine).
4 votes
Il existe un ensemble de besoins que nous trouvons souvent utiles lors de la rédaction de scripts. journalisation, affichage de la progression, couleurs, sorties sophistiquées, etc. J'ai toujours pensé qu'il devrait y avoir une sorte de structure de script simple. Finalement, j'ai décidé d'en implémenter une puisque je n'en ai trouvé aucune. Vous pourriez trouver cela utile. C'est en pur bash, je veux dire Juste Bash. github.com/SumuduLansakara/JustBash
0 votes
Ne devrait-il pas être déplacé vers unix.stackexchange.com ?
0 votes
J'aime utiliser
pv
pour tout ce qui peut être mis en tube. Exemple :ssh distant "cd /home/user/ && tar czf - comptes" | pv -s 23091k | tar xz