In ksh
, bash
ve zsh
, time
bir komut (yerleşik veya değil), bu gibi dilde ayrılmış bir kelime değildir for
ya while
.
Bir boru hattını zamanlamak için kullanılır 1 .
İçinde:
time for i in 1 2; do cmd1 "$i"; done | cmd2 > redir
Kabuğa o boru hattını çalıştırmasını söyleyen özel bir sözdiziminiz var:
for i in 1 2; do cmd1 "$i"; done | cmd2 > redir
Ve bunun için zamanlama istatistiklerini rapor edin.
İçinde:
time cmd > output 2> error
Bu, aynı konum oluyor zamanlamacmd > output 2> error
komutu ve zamanlama istatistikler yine kabuk, standart hataya gidin.
Gerekenler:
{ time cmd > output 2> error; } 2> timing-output
Veya:
exec 3>&2 2> timing-output
time cmd > output 2> error 3>&-
exec 2>&3 3>&-
Kabuğun stderr'ının timing-output
zaman yapısından önce yeniden yönlendirilmesi için (yine komut değil ) (burada zaman zaman cmd > output 2> error 3>&-
).
Bu time
yapıyı , stderr'sinin yeniden yönlendirildiği bir alt kabukta da çalıştırabilirsiniz :
(time cmd > output 2> error) 2> timing-output
Ancak bu alt kabuk burada gerekli değildir, sadece time
yapı çağrıldığında yönlendirilmek için stderr'a ihtiyacınız vardır .
Çoğu sistemde bir time
komut vardır. time
Anahtar kelimeyi devre dışı bırakarak bunu çağırabilirsiniz . Yapmanız gereken tek şey anahtar kelime olarak bir şekilde anahtar kelimenin sadece değişmez olarak tanındığını belirtmektir.
'time' cmd > output 2> error-and-timing-output
Ama biçimi farklıdır ve her ikisi stderr'si olabilir dikkat time
ve cmd
birleştirilecek error-and-timing-output
.
Ayrıca, time
komut, time
yapının aksine, boru hatlarını veya bileşik komutları veya işlevleri veya kabuk yerleşiklerini zamanlayamaz ...
Yerleşik bir komut olsaydı, işlev çağırmalarını veya yerleşikleri zamanlayabilir, ancak yeniden yönlendirmeleri veya boru hatlarını veya bileşik komutları zamanlayamazdı.
1 Not bash
(NE olarak kabul edilebilir) bir hata , burada time (cmd) 2> file
(ancak time cmd | (cmd2) 2> file
örneğin) zamanlama çıkış yönlendirirfile
time
, kabuk anahtar kelimesi olup olmamasına bağlı olarak değişeceğini unutmayın/usr/bin/time
. Burada çeşitli tanımlayıcılar olabilir (kabuğun ve birtime
sürece bağlı olanlar ). Ve()
alt kabuğun ima ettiği şeyleri unutmayalım . ( bir bash uzmanı bekliyor : p)