Di mana `time` menampilkan hasilnya?

2

Saya di Ubuntu.

Lari time tampaknya menampilkan hasilnya ke sesuatu selain STDOUT atau STDERR. Inilah mengapa saya pikir begitu:

[siminm@amide ~]$ time echo hi
hi

real    0m0.000s
user    0m0.000s
sys 0m0.000s
[siminm@amide ~]$ time echo hi >/dev/null 

real    0m0.000s
user    0m0.000s
sys 0m0.000s
[siminm@amide ~]$ time echo hi 2>/dev/null 
hi

real    0m0.000s
user    0m0.000s
sys 0m0.000s
[siminm@amide ~]$ time echo hi 2>&1 >/dev/null 

real    0m0.000s
user    0m0.000s
sys 0m0.000s
[siminm@amide ~]$ time echo hi &>/dev/null 

real    0m0.000s
user    0m0.000s
sys 0m0.000s

NAMUN

[siminm@amide ~]$ /usr/bin/time echo hi 2>/dev/null 
hi
Mikhail
sumber

Jawaban:

2

Shell Anda, yang mungkin bash, menyediakan perintah bawaan time. Ada juga program terpisah yang disebut time di /usr/bin/, yang ada di Anda $PATH. Perilaku keduanya berbeda. Jika Anda ingin konsistensi di semua konfigurasi, Anda harus menggunakan program ini /usr/bin/time bukannya bash builtin time.

Ryan Thompson
sumber
Ketika saya berlari which time ia kembali /usr/bin/time
Mikhail
@Mikhail, apa type -a time memberi tahu Anda?
glenn jackman
@glenn, time is a shell keyword time is /usr/bin/time - ini cukup jelas sekarang. Terima kasih!
Mikhail
1

Anda selalu hanya mengarahkan output dari perintah Anda. Sejak waktu menulis ke stderr coba yang berikut ini:

(time ls >> /stdout/output/of/ls 2>> /stderr/output/of/ls) 2>> /output/of/time
binfalse
sumber
Ini bagus! Saya tidak tahu Anda bisa membungkus fungsi dalam tanda kurung seperti itu
Mikhail
1

"waktu" output builtin pergi ke apa yang ditunjukkan stderr sebelum pengalihan bisa terjadi.

Perintah non builtin seperti / usr / bin / time tidak dapat mengesampingkan redirection seperti yang terjadi sebelum diluncurkan sehingga outputnya masuk ke stderr.

jlliagre
sumber