Saya mencoba menghitung waktu menggunakan:
/usr/bin/time myCommand
Namun, sejak /usr/bin/time
menulis ke stderr, jika myCommand juga menulis ke stderr, saya akan mendapatkan lebih dari sekadar keluaran waktu di arus. Yang ingin saya lakukan adalah, mengarahkan semua output myCommand ke /dev/null
, tetapi masih menulis output waktu ke stderr. Menggunakan contoh myCommand yang menulis ke stderr ls /nofile
, kita melihat bahwa (jelas) tidak ada output sama sekali dengan yang berikut ini:
$ /usr/bin/time ls /nofile 2> /dev/null
$
Tanpa pengalihan, kami melihat output dari ls
(ke stderr) dan output dari waktu (juga ke stderr):
$ /usr/bin/time ls /nofile
ls: cannot access /nofile: No such file or directory
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps
Yang saya inginkan adalah sesuatu yang hanya menghasilkan:
$ /usr/bin/time ls /nofile > RedirectThatImAskingFor
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps
Ada ide?
io-redirection
time-utility
David Doria
sumber
sumber
Jawaban:
Di ksh, bash dan zsh,
time
adalah kata kunci, bukan builtin. Pengalihan pada baris yang sama hanya berlaku untuk perintah yang diatur waktunya, bukan ke outputtime
itu sendiri.Untuk mengarahkan output dari
time
dirinya sendiri di shell ini, Anda perlu menggunakan tingkat pengelompokan tambahan.Jika Anda menggunakan versi GNU dari
time
utilitas mandiri , ia memiliki-o
opsi untuk menulis output ditime
tempat lain daripada stderr. Anda dapattime
menulis ke terminal:Jika Anda ingin menjaga output dari
time
kesalahan standarnya, Anda memerlukan level tambahan file shuffling deskriptor.Dengan
time
utilitas apa pun , Anda dapat meminta shell perantara untuk melakukan pengalihan yang diinginkan. Meminta shell perantara untuk melakukan tindakan tambahan seperticd
, pengalihan, dll. Cukup umum - itu adalah jenis hal kecil yang dirancang untuk dilakukan oleh shell.sumber
exec
mengganti shell dengan program yang ditentukan alih-alih menjalankan program itu sebagai subproses. Beberapa shell melakukan optimasi ini secara otomatis ketika sebuah perintah adalah yang terakhir dalam sebuah skrip. "Shell perantara" berarti hanya itu: shell yang berada di antaratime
danmycommand
; itu tidak terkait dengan subkulit./dev/tty
adalah terminal yang menjalankan perintah (itu tidak terkait dengan/dev/ttyNUM
yang merupakan konsol fisik; Anda bingung dengan deskriptor file: stdin/dev/fd/0
, dll).sumber
time
alias bash?which time
ditampilkan/usr/bin/time
dalam CentOS 5.7.type time
akan menunjukkan kepada Anda:time is a shell keyword