Saya menggunakan svn export
sebagai bagian dari skrip packager untuk aplikasi saya, dan sepertinya perintah ini, seperti banyak yang lainnya, tidak memiliki jenis progress bar.
Saya punya dua pilihan saat ini:
- menggunakannya tanpa opsi, dan menontonnya mencetak ribuan baris
- menggunakan
--quiet
, dan tidak melihat apa pun sampai selesai.
Apakah ada cara untuk setidaknya menunjukkan jumlah baris yang dihasilkan oleh perintah, secara real time? Seperti:
Exporting SVN directory ... 1234 files
Dan lihat 1234
peningkatan nomor ini secara real time ? Saya bisa membayangkan piping output ke perintah yang akan melakukan ini, tetapi yang mana?
sumber
=
perbedaan dan quirks yang jelek dan `. :) Mengapa mereka tidak menggantinya dengan bahasa seperti-python-syntaxed ...printf
berakhir dengan a\r
. Dan apa yang terjadi jika Anda melakukannyaecho -ne "$I\r"
atauprint -n "$I\r"
. :) Saya menggunakanprintf
, karena default untuk tidak mencetak baris baru di akhir, jadi\r
hanya bergerak kembali ke awal. Sayangnya, tidak semua implementasi gema mendukung-e
atau-n
argumen.read
menjadiread -r
(karena jika tidak, garis miring terbalik pada akhir baris akan mengacaukan penghitungan). Kebetulan, dengan sedikit kerja, ini dapat disesuaikan untuk juga menunjukkan garis keluaran terbaru, yang mungkin berguna untuk beberapa perintah.Ini adalah ide kasar, tetapi Anda bisa menggunakan
pv
perintah untuk menghitung jumlah baris saat mereka lewat dan menampilkannya ke layar.pv
di antara itu banyak saklar memiliki-l
saklar yang menghitung setiap baris saat melewati.Contoh
Di sini saya menggunakan loop sementara untuk mensimulasikan beberapa file dari output SVN Anda.
Ini akan terus menimpa jalur output seperti ini:
sumber
Anda dapat menjalankan perintah di latar belakang sebagai pekerjaan dan mengarahkan stdout (dan stderr opsional) ke file log: di
command > logfile &
mana&
menunjuk pekerjaan (jika stderr juga, katakan&>
bukan>
).Kemudian Anda bisa menggunakan utilitas wordcount untuk menghitung jumlah baris dalam logfile Anda
wc -l
.Untuk menampilkan perubahan status dalam satu baris yang berubah secara dinamis, Anda dapat menggunakan sesuatu seperti
while true; do echo -en '\r'; wc -l logfile; sleep 1; done
, tapi saya tidak bisa memaksa bash untuk menarik\r
kereta kembali untuk membunuh konten dari baris sebelumnya.Lihat pertanyaan ini, hampir merupakan duplikat: /programming/2388090/how-to-delete-and-replace-last-line-in-the-terminal-using-bash
sumber
printf/print/echo
seperti yang disarankan oleh danny. :) Tentu saja, dia bisa menggunakanless
, tapi saya kira, dia mampu mengatakanwc -l logfile
setiap kali dia tidak sabar. Saya pikir, bermain denganncurses
atau membersihkan layar adalah hal yang berlebihan di sini.echo -e 'r'
perintah saya ? Seharusnya menghapus isi baris yang dicetak sebelumnya, sehingga secara dinamis berubah, tapi saya tidak bisa memaksanya untuk melakukan itu :(