เปลี่ยนรูปแบบเอาต์พุตของเวลาของ zsh


19

ฉันเพิ่งเปลี่ยนมาzshเป็น อย่างไรก็ตามฉันไม่ชอบวิธีการที่timeคำสั่ง builtin ยังส่งออกคำสั่งว่ามันเป็นเวลา ฉันชอบbashเอาท์พุทสไตล์มาก ใครรู้วิธีสลับมันได้หรือไม่

zsh:

[casqa1:~/temp]$ time grep foo /dev/null
/usr/local/gnu/bin/grep --color -i foo /dev/null  0.00s user 0.00s system 53% cpu 0.004 total

ทุบตี:

[casqa1:~/temp]$ bash
casqa1.nyc:~/temp> time grep foo /dev/null

real        0.0
user        0.0
sys         0.0

ขอบคุณ

/ YGA

คำตอบ:


29

สิ่งนี้อยู่ใกล้พอสมควร:

$ TIMEFMT=$'\nreal\t%E\nuser\t%U\nsys\t%S'

$ time sleep 1

real    1.01s
user    0.00s
sys     0.00s

5
การแก้ไขที่ฉันเสนอถูกปฏิเสธ 2-1 TIMEFMT=$'\nreal\t%*E\nuser\t%*U\nsys\t%*S'จะเป็นการดีที่รูปแบบที่ควรจะเป็น *ในรูปแบบธงพวกเขาเป็นชั่วโมง / นาทีตามทุบตีแทนเพียงไม่กี่วินาที ข้อมูลเพิ่มเติมเกี่ยวกับที่นี่TIMEFMT
Sparhawk

8

อีกตัวเลือกหนึ่งคือปิดการใช้งานคำสั่ง builtin และใช้เวลาไบนารีที่ระบบปฏิบัติการของคุณจัดทำไว้ ฉันมีดังต่อไปนี้ในของฉัน.zshrc:

disable -r time       # disable shell reserved word
alias time='time -p ' # -p for POSIX output

วิธีนี้เวลาส่งออกไปยัง STDERR


4

เพียงแค่ความแม่นยำเล็กน้อยเกี่ยวกับคำตอบที่มีประโยชน์มากของ Dennis Williamson (ส่วน "ค่อนข้างเป็นธรรม"): timeเอาต์พุตในตัวของ bashstderrในขณะที่ผล zsh stdoutไป

คำสั่งนี้สามารถแสดงความแตกต่าง: time (echo abc) 2>/dev/null

ใน bash มันจะแสดงผล:

    $ time (echo abc) 2>/dev/null
    abc

ใน zsh พร้อมกับตัวแปร TIMEFMT ที่แนะนำ:

    $ time (echo abc) 2>/dev/null
    abc

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