Saya ingin mengeksekusi sesuatu di shell linux dalam beberapa kondisi yang berbeda, dan dapat menampilkan waktu eksekusi dari setiap eksekusi.
Saya tahu saya bisa menulis skrip perl atau python yang akan melakukan ini, tetapi apakah ada cara saya bisa melakukannya di shell? (yang kebetulan bash)
Ticks
case seperti windows?Jawaban:
Gunakan
time
kata kunci bawaan:Contoh:
sumber
time -p i=x; while read line; do x=x; done < /path/to/file.txt
? Segera mengembalikan 0,00 kecuali saya tidak meletakkan sesuatu sebelum loop sementara .. apa yang terjadi?time
dapat mengatur waktu seluruh pipa apa adanya (berdasarkan menjadi kata kunci Bash ), Anda perlu menggunakan perintah grup ({ ...; ...; }
) untuktime -p { i=x; while read line; do x=x; done < /path/to/file.txt; }
type -a time
Anda bisa mendapatkan informasi yang lebih detail daripada bash built-in
time
(yang Robert Gamble sebutkan) menggunakan waktu (1) . Biasanya ini/usr/bin/time
.Catatan editor: Untuk memastikan bahwa Anda menggunakan utilitas eksternal
time
daripada milik shell Andatime
kata kunci , panggil sebagai/usr/bin/time
.time
adalah utilitas yang diamanatkan POSIX , tetapi satu-satunya opsi yang diperlukan untuk mendukungnya adalah-p
.Platform tertentu menerapkan tertentu, ekstensi tidak standar:
-v
bekerja dengan GNU 'stime
utilitas, seperti yang ditunjukkan di bawah ini (pertanyaannya adalah ditandailinux); implementasi BSD / macOS digunakan-l
untuk menghasilkan keluaran yang serupa - lihatman 1 time
.Contoh keluaran verbose:
sumber
sumber
Untuk pengukuran delta baris demi baris, coba gnomon .
Anda juga dapat menggunakan opsi
--high
dan / atau--medium
untuk menentukan ambang panjang dalam detik, di mana gnomon akan menyorot timestamp berwarna merah atau kuning. Dan Anda dapat melakukan beberapa hal lain juga.sumber
Jika Anda ingin lebih presisi, gunakan
%N
dengandate
(dan gunakanbc
untuk diff, karena$(())
hanya menangani bilangan bulat).Inilah cara melakukannya:
Contoh:
Hasil:
sumber
Jika Anda berniat menggunakan waktu untuk menghitung, pelajari cara menggunakan
-f
opsi/usr/bin/time
untuk menghasilkan kode yang menghemat waktu. Berikut adalah beberapa kode yang saya gunakan baru-baru ini untuk mendapatkan dan mengurutkan waktu pelaksanaan dari seluruh kelas program siswa:Saya kemudian menggabungkan semua
$timefile
file dan menyalurkan output ke juru bahasa Lua . Anda dapat melakukan hal yang sama dengan Python atau bash atau apa pun sintaks favorit Anda. Saya suka teknik ini.sumber
/usr/bin/time
diperlukan karena meskipunwhich time
akan memberi tahu Anda sebaliknya, jika Anda hanya menjalankantime
, itu akan menjalankan versi shell Andatime
yang tidak menerima argumen apa pun.env time
:-)Jika Anda hanya membutuhkan ketelitian untuk yang kedua, Anda dapat menggunakan
$SECONDS
variabel bawaan , yang menghitung jumlah detik bahwa shell telah berjalan.sumber
Anda dapat menggunakan
time
dan subkulit()
:Atau dalam shell yang sama
{}
:sumber
(
&)
(konteks baru, subkulit ), dan lainnya dengan{
&}
(shell yang sama, konteks yang sama)Jalannya adalah
output adalah >>
sumber
-lphtread
atau-o
tag. Hanya perlu menggunakantime
perintah, yang jawaban yang diterima menjelaskan lebih baik.satu metode yang mungkin sederhana (yang mungkin tidak memenuhi kebutuhan pengguna yang berbeda) adalah penggunaan shell PROMPT.it adalah solusi sederhana yang dapat berguna dalam beberapa kasus. Anda dapat menggunakan fitur bash prompt seperti pada contoh di bawah ini:
Perintah di atas akan menghasilkan perubahan prompt shell ke:
Setiap kali Anda menjalankan perintah (atau tekan enter) kembali ke prompt shell, prompt akan menampilkan waktu saat ini.
Catatan:
1) berhati-hatilah bahwa jika Anda menunggu beberapa saat sebelum Anda mengetik perintah berikutnya, maka kali ini perlu dipertimbangkan, yaitu waktu yang ditampilkan dalam prompt shell adalah timestamp ketika prompt shell ditampilkan, bukan ketika Anda memasukkan perintah. beberapa pengguna memilih untuk menekan tombol Enter untuk mendapatkan prompt baru dengan stempel waktu baru sebelum mereka siap untuk perintah berikutnya.
2) Ada opsi dan pengubah lain yang tersedia yang dapat digunakan untuk mengubah prompt bash, lihat (man bash) untuk detail lebih lanjut.
sumber