Zamanın çıktı biçimi neden onu çağırdığım şekle göre değişiyor


14

Bu bir acemi sorusu olabilir, ancak bunun nasıl yapılandırıldığını ve timekomutun çıkış formatının neden bu iki durumda farklı olduğunu anlamıyorum :

üzerinden kullanılırsa time, çıktı temel bilgi içeren üç satırdır

$ time sleep 1

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

sonra hangi ikili dosyanın kullanıldığını kontrol edebilirim

$ which time
/usr/bin/time

ve çok daha fazla bilgi ile tamamen farklı bir formatta çıktı almak için doğrudan arayın

$ /usr/bin/time sleep 1
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 2000maxresident)k
0inputs+0outputs (0major+77minor)pagefaults 0swaps

ile ilgili takma ad yok time

$ alias | grep time
$ 

Koşuyorum Ubuntu 16.04.


Bu yüzden whichtemelde işe yaramaz ...
Bakuriu

Yanıtlar:


23

Birincisi, bashkendi yerleşik anahtar kelimesidir time(derlenmiş bash) ve ikincisi harici yürütülebilir dosyadır time( /usr/bin/time, paketle birlikte gelir time).

Ayrıca, whichkabuğun yerleşik komutlarını veya anahtar kelimelerini sadece arama yaparken gösteremez, bunun PATHiçin kullanmanız gerekir type. Bir kabuk yerleşik olmak type, ek olarak kabuğun iç varlıklarını (ve ayrıca PATH) kontrol edebilir , böylece farkı şu şekilde tespit edebilirsiniz:

type -a time

Buraya:

$ type -a time
time is a shell keyword
time is /usr/bin/time

İlki sadece kullanırsanız çalıştırılacaktır time. Ayrıca hangisinin sadece type(olmadan -a) kullanılarak yürütüldüğünü elde edebilirsiniz :

type time

-aSöyler typeKabuğun iç tarafta da arama ve aynı zamanda etmek PATHyani tüm olası kaynaklarda arayın.

Herhangi bir nedenle harici olana ihtiyacınız varsa, aşağıdakilerden birini kullanın:

\time
"time"
'time'
command time

ah, anlıyorum, yani whichyerleşikleri dikkate almıyor mu? Ve her zaman type -aönce kontrol etmeliyim . Aslında, konumu da typewhich/usr/bin/time
çıktıkları

@xaxa Evet, düzenlemelerimi kontrol et.
heemayl

detaylı cevap için teşekkürler! O whichzaman ne işe yarar?
xaxa

1
@xaxa typegerçekten üstündür --- bash kullanıyorsanız. Başka bir kabukta typebulitin ya da timeyerleşik bulunmayabilir .
jpaugh

2
@jpaugh Pek doğru değil. POSIX verir timesadece ama harici olarak type, typetüm POSIX uyumlu kabukları mevcuttur.
heemayl

4

Yerleşik ve harici yardımcı programlar arasındaki diğer bir fark, Bash'ın yerleşikinin time tam boru hatlarını veya kabuk işlevlerine çağrıları zamanlayacağıdır (görünüşte döngüler bile, ancak kılavuzun bunu vaat ettiği görülmemektedir). Dış timekutu, kabuk dışında olmak beri, çevredeki kodu hakkında bilgiye sahip değil.

bash$ time echo blah | sleep 3
real    0m3.002s
...
bash$ /usr/bin/time echo blah | sleep 3
0.00user 0.00system 0:00.00elapsed ?%CPU 
...
bash$ time for x in 1 2 3 ; do sleep 1 ; done
real    0m3.006s
...

Standartta zaman belirtilse de, bir boru hattında nasıl davranması gerektiği belirtilmemiş, bu nedenle bunun gibi daha güçlü bir iç uygulama mümkündür.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.