Hanya sedikit pertanyaan tentang pengaturan waktu program di Linux: perintah waktu memungkinkan untuk mengukur waktu eksekusi suatu program:
[ed@lbox200 ~]$ time sleep 1
real 0m1.004s
user 0m0.000s
sys 0m0.004s
Itu bekerja dengan baik. Tetapi jika saya mencoba mengalihkan output ke file, itu gagal.
[ed@lbox200 ~]$ time sleep 1 > time.txt
real 0m1.004s
user 0m0.001s
sys 0m0.004s
[ed@lbox200 ~]$ cat time.txt
[ed@lbox200 ~]$
Saya tahu ada implementasi waktu lain dengan opsi -o untuk menulis file tetapi pertanyaan saya adalah tentang perintah tanpa opsi itu.
Ada saran?
Jawaban:
Mencoba
yang menggabungkan STDERR dari "waktu" dan perintah Anda ke time.txt
Atau gunakan
yang menempatkan STDERR dari "sleep" ke dalam file "sleep.stderr" dan hanya STDERR dari "time" yang masuk ke "time.txt"
sumber
time
mengevaluasi.{ time sleep 1; } 2>&1 | grep real
. Ini mengirimkan stderr ke stdout yang mana grep dapat membaca.Bungkus
time
dan perintah Anda mengatur waktu dalam satu set kurung.Misalnya, waktu berikut
ls
dan tuliskan hasills
dan hasil waktunya keoutfile
:Atau, jika Anda ingin memisahkan output dari perintah dari output yang diambil dari
time
:sumber
Sederhana.
time
Utilitas GNU memiliki opsi untuk itu.Tetapi Anda harus memastikan bahwa Anda tidak menggunakan
time
perintah builtin shell Anda , setidaknyabash
builtin tidak menyediakan opsi itu! Itu sebabnya Anda perlu memberikan path lengkap daritime
utilitas:sumber
Jika Anda peduli dengan output kesalahan perintah, Anda dapat memisahkannya seperti ini saat masih menggunakan perintah waktu bawaan.
atau
Ketika Anda melihat kesalahan perintah pergi ke file (sejak
stderr
digunakan untuktime
).Sayangnya Anda tidak dapat mengirimnya ke pegangan lain (seperti
3>&2
) karena itu tidak akan ada lagi di luar{...}
Yang mengatakan, jika Anda dapat menggunakan waktu GNU, lakukan saja apa yang dikatakan @Tim Ludwinski.
sumber
Karena output dari perintah 'waktu' adalah output kesalahan, redirect sebagai output standar akan lebih intuitif untuk melakukan pemrosesan lebih lanjut.
sumber
Jika Anda menggunakan waktu GNU alih-alih bash built-in, coba
(Catatan: Format waktu GNU sedikit berbeda dari bash built-in).
sumber
\time -o outfile command
(dengan ``) untuk menggunakan GNU alih-alih bawaan.dalam kasus Anda
kemudian
sumber
time
biner diinstal,out
akan berisi sesuatu sepertibash: time: command not found
.Saya akhirnya menggunakan:
sumber
Ini memiliki keuntungan tidak memunculkan subkulit, dan pipa akhir telah mengembalikannya ke stderr yang sebenarnya.
sumber
Jika Anda tidak ingin menyentuh stdout dan stderr proses asli, Anda dapat mengarahkan stderr ke file descriptor 3 dan kembali:
Anda bisa menggunakannya untuk pembungkus (mis. Untuk cronjobs) untuk memantau runtime:
sumber
Jika Anda menggunakan,
csh
Anda dapat menggunakan:Sebagai contoh:
sumber