การใช้คำสั่ง“ time” ในตัวในทุบตีมากกว่าคำสั่งภายนอก


12

การทำงานกับtimeคำสั่งผมมาในสถานการณ์ที่ฉันควรใช้ในตัวมากกว่าคำสั่งเวลาtime GNU ภายนอก /usr/bin/timeดังนั้นฉันจะทำสิ่งนี้ได้อย่างไร ฉันเห็นบางที่ใช้enableและ / หรือcommandจะช่วย แต่พวกเขาไม่ได้

นี่เป็นกรณีการใช้งาน:

watch "time ls"

ซึ่งใช้/usr/bin/timeคำสั่งภายนอกซึ่งฉันไม่ต้องการ! สิ่งนี้เกิดขึ้นเมื่อtimeเรียกใช้ฟังก์ชันทุบตีภายในเมื่อฉันรันtime lsบนเทอร์มินัลเช่นนี้

$ time ls

โปรดทราบว่าได้รับคำตอบตรงข้ามแน่นอน:

มีความแตกต่างมากมายกับสองคำสั่ง ภายในtimeมีความแม่นยำมากขึ้น (ซึ่งฉันต้องการ) แต่คำสั่งภายนอกมีตัวเลือกเพิ่มเติม (ซึ่งฉันไม่ต้องการ)


watch 'bash -c "builtin time ls"'บางที?
เกล็นแจ็

1
ดูที่นี่เกี่ยวกับวิธีการบังคับทุบตีเพื่อใช้ builtins ดู answer2 โดย Petr Utzl: builtin timeควรทำเคล็ดลับ
Fiximan

2
@Fiximan timeไม่ใช่ builtin ในbashมันเป็นคำสงวนของภาษาเพื่อให้คุณสามารถกำหนดเวลาไปป์ไลน์ (เช่นtime foo | bar) หรือคำสั่งผสม (เช่นtime for i in...;done)
Stéphane Chazelas

คำตอบ:


13

โดยค่าเริ่มต้นwatchเรียกใช้คำสั่งของคุณด้วย/bin/sh -c '...'ผลลัพธ์ที่คุณเห็นคือวิธี/bin/shตีความtimeคำสั่ง คุณ/bin/shเห็นได้ชัดไม่ได้มี timebuiltin

ในการรันคำสั่งด้วยเชลล์ที่แตกต่างกันให้ใช้-xตัวเลือกเพื่อกำจัดค่าเริ่มต้นจากนั้นเพิ่มการร้องขออย่างชัดเจนของเชลล์ที่มีบิวด์อินที่คุณต้องการ

watch -x bash -c 'time ls'
watch -x zsh -c 'time ls'

ไม่ว่าคุณจะรันwatchอย่างไรคำสั่งที่คุณรับชมไม่ใช่ลูกของเชลล์ที่รันwatchคำสั่งดังนั้นการตั้งค่าของเชลล์จะไม่เกี่ยวข้องโดยตรง

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