J'utilise svn export
dans le cadre d'un script de packager pour mon application, et il semble que cette commande, comme beaucoup d'autres, n'a pas de barre de progression.
J'ai deux choix pour le moment:
- l'utiliser sans options, et regardez-le imprimer des milliers de lignes
- en utilisant
--quiet
, et ne rien voir jusqu'à ce qu'il se termine.
Existe-t-il un moyen d'afficher au moins le nombre de lignes générées par la commande, en temps réel? Tel que:
Exporting SVN directory ... 1234 files
Et voir cet 1234
incrément de nombre en temps réel ? Je peux imaginer diriger la sortie vers une commande qui ferait exactement cela, mais laquelle?
la source
=
différences et bizarreries laides et `=`. :) Pourquoi ne le remplaceraient-ils pas par un langage syntaxique de type python ...printf
se termine par un\r
. Et que se passe-t-il si vous le faitesecho -ne "$I\r"
ouprint -n "$I\r"
. :) J'ai utiliséprintf
, cependant, parce que par défaut, il n'imprime pas une nouvelle ligne à la fin, donc le\r
retourne au début. Malheureusement, toutes les implémentations d'écho ne prennent pas en charge l' argument-e
or-n
.read
àread -r
(car sinon une barre oblique inversée à la fin d'une ligne perturberait le comptage). Incidemment, avec un peu de travail, cela peut être adapté pour afficher également la dernière ligne de sortie, ce qui peut être utile pour certaines commandes.C'est une idée approximative, mais vous pouvez utiliser la
pv
commande pour compter le nombre de lignes au fur et à mesure et les afficher à l'écran.pv
parmi ses nombreux commutateurs, un-l
commutateur compte chaque ligne au fur et à mesure.Exemple
Ici, j'utilise une boucle while pour simuler certains fichiers à partir de votre sortie SVN.
Il continuera d'écraser la ligne de sortie comme ceci:
la source
Vous pouvez exécuter votre commande en arrière-plan en tant que travail et rediriger sa sortie standard (et éventuellement stderr) vers un fichier journal:
command > logfile &
où&
désigne la tâche (si stderr aussi, dites à la&>
place de>
).Ensuite, vous pouvez utiliser l'utilitaire wordcount pour compter le nombre de lignes de votre fichier journal avec
wc -l
.Pour montrer le changement d'état dans une ligne changeant dynamiquement, vous pouvez utiliser quelque chose comme
while true; do echo -en '\r'; wc -l logfile; sleep 1; done
, mais je ne peux pas forcer bash à dessiner\r
un retour chariot pour tuer le contenu de la ligne précédente.Voir cette question, c'est presque un doublon: /programming/2388090/how-to-delete-and-replace-last-line-in-the-terminal-using-bash
la source
printf/print/echo
comme le suggère Danny. :) Bien sûr, il pourrait utiliserless
, mais je suppose qu'il peut se permettre de le dire àwc -l logfile
chaque fois qu'il s'impatiente. Je pense que jouer avecncurses
ou effacer l'écran est une exagération ici.echo -e 'r'
commande? Il devrait effacer le contenu de la ligne précédemment imprimé, afin qu'il change dynamiquement, mais je ne peux pas le forcer à le faire :(