J'exécute un script shell qui canalise les données d'un processus à un autre
process_a | process_b
Quelqu'un connaît-il un moyen de savoir combien d'octets ont été passés entre les deux programmes? La seule solution à laquelle je peux penser pour le moment serait d'écrire un petit programme c qui lit depuis stdin, écrit dans stdout et compte toutes les données transférées, stockant le compte dans une variable d'environnement, comme:
process_a | count_bytes | process_b
Quelqu'un at-il une solution plus soignée?
exec
le fichier et simplement l'exporter directement dans le fichier?input-command | dd 2>~/fred | output-command
Utilisez pv le visualiseur de tuyaux. C'est un excellent outil. Une fois que vous en aurez connaissance, vous ne saurez jamais comment vous viviez sans.
Il peut également vous montrer une barre de progression et la «vitesse» du transfert.
la source
cat file | pv -b
retournera la taille du fichier.process_a | tee >(process_b) | wc --bytes
pourrait fonctionner. Vous pouvez ensuite redirigerwc
le décompte vers l'endroit où vous en avez besoin. Siprocess_b
quelque chose sort versstdout
/stderr
vous devrez probablement rediriger cela quelque part, ne serait-ce que/dev/null
.Pour un exemple légèrement artificiel:
À titre d'explication:
tee
vous permet de diriger la sortie vers plusieurs fichiers (plus stdout) et la>()
construction est la "substitution de processus" de bash qui fait ressembler un processus à un fichier en écriture seule dans ce cas afin que vous puissiez rediriger vers des processus ainsi que des fichiers ( voir ici , ou cette question + réponse pour un exemple d'utilisationtee
pour envoyer la sortie à de nombreux processus).la source
Je sais que je suis en retard à la fête, mais je pense avoir une bonne réponse qui peut améliorer ce fil utile.
Il s'agit d'un mélange de @Phil P et @David Spillett réponse, mais:
Le nombre d'octets est imprimé sur stdout, avec toute sortie de process_b.
Vous pouvez utiliser un préfixe pour identifier la ligne contenant des octets lorsque vous travaillez avec la sortie (
Bytes:
dans l'exemple).AVERTISSEMENT:
ne vous fiez pas à l'ordre des lignes dans la sortie
L'ordre est imprévisible et il peut toujours différer, même lors de l'appel du même script avec les mêmes paramètres!
la source