Sử dụng lệnh thời gian trực tuyến tích hợp sẵn trong bash thay vì lệnh bên ngoài


12

Làm việc với timelệnh, tôi đã gặp một tình huống mà tôi nên sử dụng lệnh tích hợp bên trong timethay vì lệnh thời gian GNU bên ngoài /usr/bin/time. Vì vậy, làm thế nào tôi có thể làm điều này? Tôi đã thấy ở đâu đó rằng sử dụng enablevà / hoặc commandsẽ giúp đỡ, nhưng họ đã không làm.

Đây là trường hợp sử dụng:

watch "time ls"

trong đó sử dụng /usr/bin/timelệnh bên ngoài , mà tôi không muốn! Điều này xảy ra khi timegọi hàm bash nội bộ khi tôi chạy time lstrên thiết bị đầu cuối, như thế này:

$ time ls

Xin lưu ý rằng yêu cầu ngược lại chính xác đã được trả lời ở đây:

Có rất nhiều sự khác biệt với hai lệnh. Nội bộ timechính xác hơn (mà tôi muốn), nhưng lệnh bên ngoài có nhiều tùy chọn hơn (mà tôi không cần).


watch 'bash -c "builtin time ls"'có lẽ?
glenn jackman

1
xem ở đây về cách buộc bash sử dụng nội trang, xem answer2 của Petr Utzl: builtin timenên thực hiện thủ thuật.
Fiximan

2
@Fiximan, timekhông phải là từ dựng sẵn bash, nó là một từ dành riêng cho ngôn ngữ để bạn có thể đặt thời gian cho các đường ống (như time foo | bar) hoặc các lệnh ghép (như time for i in...;done)
Stéphane Chazelas

Câu trả lời:


13

Theo mặc định, watchchạy lệnh của bạn với /bin/sh -c '...'đầu ra mà bạn thấy là như thế nào/bin/sh diễn giải timelệnh. Của bạn /bin/shdường như không có một dựng sẵn time.

Để chạy lệnh với lớp vỏ khác, hãy sử dụng -x tùy chọn để thoát khỏi mặc định, sau đó thêm lời gọi rõ ràng của riêng bạn về shell mà bạn muốn dựng sẵn.

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

Cho dù bạn chạy như thế nào watch, lệnh bạn đang xem không phải là con của shell chạy watchlệnh, vì vậy các cài đặt của shell không liên quan trực tiếp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.