Tại sao lệnh `time` không hoạt động với bất kỳ tùy chọn nào?


61

Tôi đã cố gắng sử dụng timelệnh với -ftùy chọn để định dạng đầu ra của thời gian, nhưng tôi gặp lỗi sau:

-f: command not found

Sau đó, tôi cố gắng sử dụng lựa chọn khác -a, -o, vv và tôi nhận được lỗi tương tự. Thậm chí time --versionkhông hoạt động ( --version: command not found).

Đừng bảo tôi đọc người đàn ông bởi vì tôi đã làm điều đó nhiều lần ... Tất cả các tùy chọn này được chỉ định ở đó. Vì vậy, đâu có thể là vấn đề?


sudo apt-get install --reinstall timegiúp gì không?
việc

9
Hoặc có thể lớp vỏ bên trong timevới/usr/bin/time
Rmano

Câu trả lời:


91

Chà, ngay cả khi bạn không thích nó, tôi sẽ khiến bạn đọc lại với sự chú ý nhiều hơn man time. Ở cuối EXAMPLESphần bạn sẽ tìm thấy:

  Users of the bash shell need to use an explicit path in order to run
  the external time command and not the shell builtin variant.  On system
  where time is installed in /usr/bin, the first example would become
       /usr/bin/time wc /etc/hosts

Vì vậy, tôi giả sử rằng bạn sử dụng bash shell sử dụng phiên bản nội bộ time, được cung cấp dưới dạng từ khóa shell. Bạn có thể kiểm tra điều này bằng lệnh sau:

type time

và đầu ra có thể sẽ là:

time is a shell keyword

Nếu đây là trường hợp, thì rõ ràng, để sử dụng lệnh thực time , bạn phải sử dụng đường dẫn rõ ràng của nó : /usr/bin/time.

Hơn nữa, nếu bạn không muốn sử dụng từ khóa shell nữa time, bạn có thể tạo bí danh vĩnh viễn như sau:

alias time='/usr/bin/time'

Điều này sẽ ghi đè lên từ khóa shell timevì lệnh:

type time

sẽ đưa ra kết quả sau:

time is aliased to `/usr/bin/time'

5
đối với các lệnh được xây dựng shell: {thông tin thời gian} và {loại thời gian}. Đối với các lệnh nhị phân: {which time} và {man time}
Michael Martinez

@Michael info timelà về nhị phân. help timelà về nội dung.
wjandrea

vâng, xin lỗi tôi đã suy nghĩ "giúp đỡ" nhưng đã xuất hiện "thông tin"
Michael Martinez

21

Vì, như các câu trả lời khác giải thích, timelà một từ khóa shell, tùy chọn duy nhất có sẵn cho bạn là -p:

terdon@oregano ~ $ help time
time: time [-p] pipeline
    Report time consumed by pipeline's execution.

Execute PIPELINE and print a summary of the real time, user CPU time,
and system CPU time spent executing PIPELINE when it terminates.

Options:
  -p    print the timing summary in the portable Posix format

Vì vậy, bạn cần phải chạy cái timeđó trong /usr/bin. Dưới đây là một số cách để làm như vậy:

  • Sử dụng timethực thi thay thế:

    /usr/bin/time -f %Uuser ls >/dev/null
  • Sử dụng \nguyên nhân khiến shell của bạn bỏ qua các bí danh và từ khóa và thay vào đó tìm kiếm của bạn $PATHđể tìm một tệp thực thi phù hợp:

    \time -f %Uuser ls >/dev/null 
  • Sử dụng commandnội dung có hiệu ứng tương tự:

    command time -f %Uuser ls >/dev/null
  • Sử dụng một vỏ khác nhau, một vỏ không có từ khóa như vậy. Ví dụ: sh(thực tế là dashtrên Ubuntu):

    sh -c "time -f %Uuser ls >/dev/null"
  • Sử dụng which, sẽ tìm kiếm thông qua $PATH(OK, cái này là ngớ ngẩn):

    $(which time) -f %Uuser ls >/dev/null

Có cách nào để làm ngược lại - sao chép tích hợp timevới thường xuyên /usr/bin/timekhông? Tức là dịch bash script thành dash.
Dan M.

@DanM. Tôi không hiểu Nếu bạn muốn dựng sẵn time, hãy chạy time. Nếu bạn muốn thực thi độc lập, hãy chạy /usr/bin/time.
terdon

timetheo như tôi biết thì không có vỏ mặc định của Ubuntu. Tôi muốn dịch tập lệnh bằng cách sử dụng tích hợp thành độc lập với hành vi tương tự.
Dan M.

@DanM. sau đó chỉ cần sử dụng time. Nó sẽ gọi bất cứ ai có sẵn. Đó sẽ là nội dung cho bash và độc lập cho dấu gạch ngang. Nếu bạn sử dụng /usr/bin/time, thì nó sẽ luôn gọi là độc lập, cả trong bash và dash. Nhưng có vẻ như bạn có thể nên hỏi một câu hỏi mới, giải thích hành vi bạn cần. Hãy cho tôi biết nếu bạn làm và tôi sẽ cố gắng giúp đỡ.
terdon

vâng, nhưng tích hợp và độc lập có cú pháp / ngữ nghĩa khác nhau đáng kể. Dù sao cũng cảm ơn. Tôi sẽ hỏi một câu hỏi mới nếu tôi không tìm ra cách tự giải quyết nó.
Dan M.

17

Các bashzshvỏ có timelệnh nội bộ của họ . Bạn phải sử dụng

/usr/bin/time -f ...

BTW, tôi phát hiện ra rằng sử dụng (từ zsh):

~% which  time
time: shell reserved word
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.