Apakah mungkin untuk mencetak waktu eksekusi perintah shell dengan kombinasi berikut?
root@hostname:~# "command to execute" && echo "execution time"
Apakah mungkin untuk mencetak waktu eksekusi perintah shell dengan kombinasi berikut?
root@hostname:~# "command to execute" && echo "execution time"
Jawaban:
Jangan lupa bahwa ada perbedaan antara bash's builtin time(yang harus dipanggil secara default saat Anda melakukannya time command) dan /usr/bin/time(yang mengharuskan Anda untuk memanggilnya dengan jalur lengkapnya).
Builtin timeselalu mencetak ke stderr, tetapi /usr/bin/timeakan memungkinkan Anda untuk mengirim keluaran waktu ke file tertentu, jadi Anda tidak mengganggu aliran stderr perintah yang dieksekusi. Selain itu, /usr/bin/timeformat dapat dikonfigurasi pada baris perintah atau oleh variabel lingkungan TIME, sedangkan timeformat bawaan bash hanya dikonfigurasi oleh TIMEFORMATvariabel lingkungan.
$ time factor 1234567889234567891 # builtin
1234567889234567891: 142662263 8653780357
real 0m3.194s
user 0m1.596s
sys 0m0.004s
$ /usr/bin/time factor 1234567889234567891
1234567889234567891: 142662263 8653780357
1.54user 0.00system 0:02.69elapsed 57%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+215minor)pagefaults 0swaps
$ /usr/bin/time -o timed factor 1234567889234567891 # log to file `timed`
1234567889234567891: 142662263 8653780357
$ cat timed
1.56user 0.02system 0:02.49elapsed 63%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+217minor)pagefaults 0swaps
help timekarena saya hanya melihatnya sekilas dan saya pikir itu adalah argumen baris perintah. Saya akan memperbarui jawabannya.
time adalah perintah bawaan di sebagian besar shell yang menulis informasi waktu eksekusi ke tty.
Anda juga bisa mencoba sesuatu seperti
start_time=`date +%s`
<command-to-execute>
end_time=`date +%s`
echo execution time was `expr $end_time - $start_time` s.
Atau di bash:
start_time=`date +%s`
<command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s
timemenggunakan milidetik. Dan jika Anda ingin time ( command1 ; command2 ; command3 )mengatur waktu beberapa perintah bersama-sama tanpa harus menggunakan variabel dan kalkulasi, Anda dapat menggunakan tanda kurung: Anda bahkan dapat mengatur waktunya secara individual dengan total waktu, seperti: time ( time command1 ; time command2 ; time command3 ) Tentu saja, jika Anda menginginkan sekitar dua puluh perintah, mungkin lebih baik menggunakan solusi jawaban ini. Tapi kemudian, Anda harus mulai berpikir untuk meletakkan semua perintah Anda dalam sebuah skrip ...
root@hostname:~# time [command]
Ini juga membedakan antara waktu nyata yang digunakan dan waktu sistem yang digunakan.
timemenulis ke tty, bukan stderr. Yang kurasa memperburuk keadaan.
Untuk pengukuran delta baris demi baris, coba gnonom .
Ini adalah utilitas baris perintah, mirip dengan ts moreutils, untuk menambahkan informasi stempel waktu ke keluaran standar dari perintah lain. Berguna untuk proses yang berjalan lama di mana Anda menginginkan catatan sejarah tentang apa yang memakan waktu lama.
Mengirimkan apa pun ke gnomon akan menambahkan stempel waktu ke setiap baris, yang menunjukkan berapa lama baris itu menjadi baris terakhir dalam buffer - yaitu, berapa lama baris berikutnya muncul. Secara default, gnomon akan menampilkan detik-detik yang telah berlalu di antara setiap baris, tetapi itu dapat dikonfigurasi.
Jika saya memulai proses yang berjalan lama seperti salinan atau hash dan saya ingin tahu nanti berapa lama, saya hanya melakukan ini:
$ date; sha1sum reallybigfile.txt; date
Yang akan menghasilkan keluaran berikut:
Tue Jun 2 21:16:03 PDT 2015
5089a8e475cc41b2672982f690e5221469390bc0 reallybigfile.txt
Tue Jun 2 21:33:54 PDT 2015
Memang, seperti yang diterapkan di sini, ini tidak terlalu tepat dan tidak menghitung waktu yang telah berlalu. Tapi itu sangat sederhana dan terkadang semua yang Anda butuhkan.
Dalam zsh Anda dapat menggunakan
=time ...
Di bash atau zsh, Anda dapat menggunakan
command time ...
Ini (dengan mekanisme yang berbeda) memaksa perintah eksternal untuk digunakan.
Hanya ps -o etime= -p "<your_process_pid>"
man bash: "Variabel TIMEFORMAT dapat disetel ke string format yang menentukan bagaimana informasi pengaturan waktu harus ditampilkan"