ฉันจะจับเวลาคำสั่งเฉพาะได้อย่างไร


คำตอบ:


93

ลองเพียงแทนtimetimethis

แม้ว่าโปรดทราบว่ามักจะมีรุ่นของเชลล์ในตัวและรุ่นไบนารีซึ่งจะให้ผลลัพธ์ในรูปแบบที่แตกต่างกัน:

$ time wget -q -O /dev/null https://unix.stackexchange.com/

real    0m0.178s
user    0m0.003s
sys     0m0.005s

VS

$ \time wget -q -O /dev/null https://unix.stackexchange.com/
0.00user 0.00system 0:00.17elapsed 4%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+613minor)pagefaults 0swaps

ไม่เหมือนกับโปรแกรม "timethis" คุณจะได้รับสามค่ากลับมา นั่นคือการแบ่งใน"เวลาของระบบ" คืออะไรเมื่อใช้ "เวลา" ในบรรทัดคำสั่งแต่ในระยะสั้น: จริงหมายถึง "เวลานาฬิกาแขวน" ในขณะที่ผู้ใช้และsysแสดงเวลานาฬิกาของ CPU แบ่งระหว่างรหัสปกติและการเรียกระบบ


26

โดยการใช้ไฟล์ปฏิบัติการtimeแทนเชลล์บิลด์อินคุณสามารถระบุรูปแบบเอาต์พุตและค่าได้ เช่นรับเวลาที่ผ่านไปจริงพร้อมกับชื่อคำสั่งและพารามิเตอร์

/usr/bin/time --format='%C took %e seconds' sleep 3
sleep 3 took 3.00 seconds

โปรดทราบว่าคุณต้องระบุพา ธ สำหรับtimeมิฉะนั้นคุณจะใช้เชลล์ในตัวเป็นค่าเริ่มต้น


4
สังเกตว่า: เส้นทางนั้นสำคัญ อย่าใช้เพียง 'เวลา' ในการทุบตี ให้ใช้ / usr / bin / time แทน
CodeFarmer

1
อะไรคือสิ่งที่แตกต่างกันหาก/usr/binอยู่ในเส้นทางของพวกเขา
galois

@galois ความแตกต่างคือไม่มีเส้นทางที่ชัดเจนtimeจะใช้ยูทิลิตี้ในตัวของเชลล์
Kusalananda

ยังสามารถใช้command timeหรือ\timeเรียกใช้ยูทิลิตี้แทนการสร้างใน
forcefsck

0

@galois: เชลล์ต่าง ๆ มีคำสั่ง "built-in" จำนวนหนึ่งซึ่งมีความสำคัญเหนือกว่าสิ่งใดในพา ธ โดยปกตินี่เป็นข้อได้เปรียบ บิวด์อินมักจะทำงานได้เร็วขึ้น (เพราะไม่ได้เรียกไฟล์ภายนอก) และโดยทั่วไปจะให้ผลลัพธ์ที่ต้องการ (เช่นในกรณีที่คำสั่งเวลาคุณปกติไม่สนใจรุ่นที่คุณใช้เว้นแต่คุณต้องการใช้ " - รูปแบบ "ธง")

ดังนั้น "เวลา" โดยไม่มีอักขระพิเศษใด ๆ (เช่น /) เพื่อทำให้ดูเหมือนว่าเส้นทางจะจบลงด้วยการใช้งานบิวด์อินโดยไม่คำนึงว่า PATH ของคุณจะเป็นอย่างไร

ในการบังคับให้เชลล์ใช้คำสั่งเวลาภายนอกคุณต้องระบุพา ธ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.