Saya ingin menampilkan waktu penyelesaian skrip.
Apa yang saya lakukan saat ini adalah -
#!/bin/bash
date ## echo the date at start
# the script contents
date ## echo the date at end
Ini hanya menunjukkan waktu awal dan akhir skrip. Apakah mungkin untuk menampilkan output berbutir halus seperti waktu prosesor / waktu, dll?
Jawaban:
Cukup gunakan
time
saat Anda memanggil skrip:sumber
real
,user
dansys
. Untuk maknanya, lihat di sini .time $( ... ) >> out.txt
time (command1 && command2)
Jika
time
bukan opsi,sumber
date
dua kali, misalnya, sehingga Anda mungkin di terbaik mendapatkan milidetik presisi dalam praktek, dan mungkin kurang), coba gunakandate +%s.%N
. (%N
Adalah nanoseconds sejak seluruh detik.)date +%s%N
, atau gunakan sesuatu yang lebih mampubc
menghitung runtime aktual dari dua nilai seperti yang disarankan jwchew. Namun, saya merasa pendekatan ini adalah cara yang kurang optimal untuk melakukannya;time
jauh lebih baik jika tersedia, untuk alasan yang diuraikan di atas.bc
dan kemudian lakukan ini:runtime=$( echo "$end - $start" | bc -l )
echo "Duration: $((($(date +%s)-$start)/60)) minutes
Panggil saja
times
tanpa argumen saat keluar dari skrip Anda.Dengan
ksh
atauzsh
, Anda juga bisa menggunakannyatime
. Denganzsh
,time
juga akan memberi Anda waktu jam dinding selain waktu pengguna dan sistem CPU.Untuk mempertahankan status keluar dari skrip Anda, Anda dapat membuatnya:
Atau Anda juga dapat menambahkan jebakan pada
EXIT
:Dengan begitu, waktu akan dipanggil setiap kali shell keluar dan status keluar akan dipertahankan.
Perhatikan juga bahwa semua
bash
,ksh
danzsh
memiliki$SECONDS
variabel khusus yang secara otomatis bertambah setiap detik. Di keduazsh
danksh93
, variabel itu juga bisa dibuat floating point (dengantypeset -F SECONDS
) untuk mendapatkan lebih presisi. Ini hanya jam dinding, bukan waktu CPU.sumber
time
pendekatan yang disajikan sebelumnya. - - Saya pikirtimeit
pendekatan yang disajikan dalam kode MATLAB dapat bermanfaat di sini.times
tidak memberi waktu dinding, kan? misalnya,bash -c 'trap times EXIT;sleep 2'
Saya agak terlambat untuk ikut-ikutan, tetapi ingin memposting solusi saya (untuk presisi sub-detik) kalau-kalau ada orang lain yang tersandung pada thread ini melalui pencarian. Outputnya dalam format hari, jam, menit, dan akhirnya detik:
Semoga seseorang di luar sana menemukan ini berguna!
sumber
date
tidak mendukung ketepatan sub-detik dan hanya akan menambahkan "N
" literal ke stempel waktu.dt2=$(echo "$dt%86400" | bc)
. Hanya mengatakan ... Btw saya lebih suka bentukdt2=$(bc <<< "${dt}%86400")
tapi itu sepenuhnya pribadi.Metode saya untuk
bash
:sumber
Ya, ini panggilan Python, tetapi jika Anda bisa hidup dengan itu maka ini solusi yang cukup bagus.
sumber
python
perintah itu dalam subkulit dan membaca outputnya akan membutuhkan beberapa juta nanodetik pada kebanyakan sistem saat ini. Sama untuk berlaridate
.Pertanyaan ini cukup lama tetapi dalam mencoba menemukan cara favorit saya untuk melakukannya, utas ini muncul tinggi ... dan saya terkejut tidak ada yang menyebutkannya:
'perf' adalah alat analisis kinerja yang termasuk dalam kernel di bawah 'tools / perf' dan sering tersedia untuk diinstal sebagai paket terpisah ('perf' di CentOS dan 'linux-tools' di Debian / Ubuntu). Linux Kernal perf Wiki memiliki lebih banyak informasi tentangnya.
Menjalankan 'stat stat' memberikan sedikit detail termasuk waktu eksekusi rata-rata tepat di akhir:
sumber
perf
?perf stat
sekarang mengeluh tentang "Anda mungkin tidak memiliki izin untuk mengumpulkan statistik." kecuali Anda menjalankan beberapa perintahsudo
, yang membuatnya tidak berguna di semua skenario di mana Anda tidak sepenuhnya memiliki mesin target.Fungsi shell kecil yang dapat ditambahkan sebelum perintah untuk mengukur waktu mereka:
Kemudian gunakan dalam skrip Anda, atau pada baris perintah Anda seperti ini:
sumber
s=$(date +%s000)
, tidak yakin apakah itu berfungsi.Berikut variasi jawaban Alex. Saya hanya peduli menit dan detik, tetapi saya juga ingin itu diformat berbeda. Jadi saya melakukan ini:
sumber
sumber
date
sebelum dan sesudah skrip dan menghasilkan perbedaan di antara mereka?Dengan hanya menggunakan bash, juga dimungkinkan untuk mengukur dan menghitung durasi waktu untuk sebagian skrip shell (atau waktu yang telah berlalu untuk seluruh skrip):
Anda sekarang dapat mencetak perbedaannya:
jika Anda hanya membutuhkan durasi tambahan, lakukan:
Anda juga dapat menyimpan durasi dalam suatu variabel:
sumber
Secara pribadi, saya suka membungkus semua kode skrip saya di beberapa fungsi "utama" seperti:
Perhatikan betapa mudahnya menggunakan
time
perintah dalam skenario ini. Jelas Anda tidak mengukur waktu yang tepat termasuk waktu parse skrip, tapi saya merasa cukup akurat dalam kebanyakan situasi.sumber
sumber
Fungsi pengaturan waktu berdasarkan
SECONDS
, terbatas hanya pada granularity tingkat kedua, tidak menggunakan perintah eksternal apa pun:Sebagai contoh:
memberi
sumber