Saya menulis skrip di bash untuk menghitung waktu yang telah berlalu untuk eksekusi perintah saya, pertimbangkan:
STARTTIME=$(date +%s)
#command block that takes time to complete...
#........
ENDTIME=$(date +%s)
echo "It takes $($ENDTIME - $STARTTIME) seconds to complete this task..."
Saya kira logika saya benar tetapi saya berakhir dengan cetakan berikut:
"Perlu beberapa detik untuk menyelesaikan tugas ini ..."
Ada yang salah dengan evaluasi string saya?
Saya percaya variabel bash tidak diketik, saya akan senang jika ada metode "string ke integer" di bash.
Saya merasa sangat bersih menggunakan variabel internal "$ SECONDS"
SECONDS=0 ; sleep 10 ; echo $SECONDS
sumber
$SECONDS
memang berfungsi untuk / bin / bash. Ini tidak berfungsi untuk / bin / dasbor, shell default di Debian dan Ubuntu.sleep 0.5
di atas, hasilnya kadang-kadang 0, kadang-kadang 1 (setidaknya oleh Bash 5.0.3).Anda mencoba untuk mengeksekusi nomor di
ENDTIME
sebagai perintah. Anda juga akan melihat kesalahan seperti1370306857: command not found
. Alih-alih gunakan ekspansi aritmatika :Anda juga dapat menyimpan perintah dalam skrip terpisah
commands.sh
, dan menggunakan perintah waktu:sumber
Anda dapat menggunakan
time
kata kunci Bash di sini dengan string format yang sesuaiInilah yang dikatakan referensi tentang
TIMEFORMAT
:sumber
Untuk nomor yang lebih besar, kami mungkin ingin mencetak dalam format yang lebih mudah dibaca. Contoh di bawah ini sama seperti yang lain, tetapi juga dicetak dalam format "manusia":
Pengujian sederhana:
Keluaran:
Untuk digunakan dalam skrip seperti yang dijelaskan di posting lain (tangkap titik awal kemudian panggil fungsi dengan waktu selesai:
sumber
Coba kode berikut:
sumber
Ini adalah alternatif satu baris untuk fungsi Mike Q:
sumber
SECONDS
dari jawaban Lon Kaut dan mengingat bahwa $ / $ {} tidak diperlukan pada variabel aritmatika membuat kode menjadi sangat pendek bahkan dapat digunakan secara inline:echo "$((SECONDS/3600))h $(((SECONDS/60)%60))m $((SECONDS%60))s"
coba gunakan waktu dengan opsi detik yang telah berlalu:
/usr/bin/time -f%e sleep 1
di bawah pesta.atau
\time -f%e sleep 1
dalam pesta interaktif.lihat halaman manual waktu:
dan
sumber
/bin/time
tidak akan berfungsi di sini: OP menyebutkan satu blok . Jadi kami sangat membutuhkan kata kunci ditime
sini.sumber
sumber