Saya menjalankan skrip shell yang menyalurkan data dari satu proses ke proses lainnya
process_a | process_b
Apakah ada yang tahu cara untuk mengetahui berapa banyak byte yang dilewatkan antara kedua program? Satu-satunya solusi yang dapat saya pikirkan saat ini adalah menulis sebuah program c kecil yang bertuliskan stdin, menulis ke stdout dan menghitung semua data yang ditransfer, menyimpan hitungan dalam variabel lingkungan, seperti:
process_a | count_bytes | process_b
Adakah yang punya solusi yang lebih rapi?
exec
dan langsung menampilkan ke file?input-command | dd 2>~/fred | output-command
Gunakan pv penampil pipa. Ini alat yang hebat. Setelah Anda mengetahuinya, Anda tidak akan pernah tahu bagaimana Anda hidup tanpanya.
Ini juga dapat menunjukkan kepada Anda bilah kemajuan, dan 'kecepatan' transfer.
sumber
cat file | pv -b
akan mengembalikan ukuran file.process_a | tee >(process_b) | wc --bytes
mungkin bekerja. Anda kemudian dapat mengarahkan ulangwc
hitungan ke mana pun Anda membutuhkannya. Jikaprocess_b
output apa pun kestdout
/stderr
Anda mungkin perlu mengarahkan ini di suatu tempat, jika saja/dev/null
.Untuk contoh yang sedikit dibuat-buat:
Sebagai penjelasan:
tee
memungkinkan Anda mengarahkan keluaran ke banyak file (plus stdout) dan>()
konstruksinya adalah "proses substitusi" bash yang membuat proses tampak seperti file hanya-tulis dalam kasus ini sehingga Anda dapat mengarahkan ulang ke proses serta file ( lihat di sini , atau pertanyaan + jawaban ini untuk contoh penggunaantee
untuk mengirim output ke banyak proses).sumber
Saya tahu saya terlambat ke pesta, tapi saya yakin saya punya jawaban yang bagus yang dapat meningkatkan utas bermanfaat ini.
Ini adalah campuran dari @Phil P dan @David Spillett jawaban, tetapi:
Bytes-count dicetak ke stdout, bersama dengan output dari process_b.
Anda dapat menggunakan awalan untuk mengidentifikasi baris yang berisi byte saat bekerja dengan output (
Bytes:
dalam contoh).PERINGATAN:
Jangan bergantung pada urutan garis dalam output
. Urutan tidak dapat diprediksi dan selalu dapat berbeda, bahkan ketika memanggil skrip yang sama dengan parameter yang sama!
sumber