Mengapa perintah `time` tidak berfungsi dengan opsi apa pun?

61

Saya mencoba menggunakan timeperintah dengan -fopsi untuk memformat keluaran waktu, tetapi saya mendapatkan kesalahan berikut:

-f: command not found

Kemudian saya mencoba menggunakan pilihan lain -a, -o, dll dan saya mendapatkan error yang sama. Bahkan time --versiontidak berhasil ( --version: command not found).

Jangan katakan padaku untuk membaca lelaki itu karena aku sudah melakukannya berkali-kali ... Semua opsi ini ditentukan di sana. Jadi, di mana masalahnya?

pengguna258266
sumber
Apakah sudo apt-get install --reinstall timemembantu?
jobin
9
Atau mungkin cangkang internal timedengan/usr/bin/time
Rmano

Jawaban:

91

Yah, bahkan jika Anda tidak menyukainya, saya akan membuat Anda membaca lagi dengan lebih banyak perhatian man time. Di akhir EXAMPLESbagian Anda akan menemukan:

  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

Jadi, saya berasumsi bahwa Anda menggunakan bash shell yang menggunakan versi internal time, yang disediakan sebagai kata kunci shell. Anda dapat memeriksa ini menggunakan perintah berikut:

type time

dan hasilnya mungkin:

time is a shell keyword

Jika hal ini terjadi, maka jelas, untuk menggunakan real time perintah, Anda harus menggunakan jalan eksplisit: /usr/bin/time.

Selanjutnya, jika Anda tidak ingin menggunakan lagi kata kunci shell time, Anda dapat membuat alias permanen sebagai berikut:

alias time='/usr/bin/time'

Ini akan menimpa kata kunci shell timekarena perintah:

type time

akan memberikan output berikut sekarang:

time is aliased to `/usr/bin/time'
Radu Rădeanu
sumber
5
untuk perintah shell built: {info time} dan {type time}. Untuk perintah biner: {waktu mana} dan {waktu pria}
Michael Martinez
@Michael info timeadalah tentang biner. help timeadalah tentang builtin.
wjandrea
ya, maaf saya berpikir "tolong" tetapi keluarlah "info"
Michael Martinez
21

Karena, seperti yang dijelaskan oleh jawaban lain, timeadalah kata kunci shell, satu-satunya pilihan yang tersedia untuk Anda adalah -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

Jadi, Anda perlu menjalankan timeyang ada di /usr/bin. Berikut ini beberapa cara untuk melakukannya:

  • Gunakan yang timedapat dieksekusi sebagai gantinya:

    /usr/bin/time -f %Uuser ls >/dev/null
  • Gunakan \yang menyebabkan shell Anda mengabaikan alias dan kata kunci dan sebagai gantinya mencari Anda $PATHuntuk dieksekusi yang cocok:

    \time -f %Uuser ls >/dev/null 
  • Gunakan commandbuiltin yang memiliki efek serupa:

    command time -f %Uuser ls >/dev/null
  • Gunakan shell yang berbeda, shell yang tidak memiliki kata kunci seperti itu. Misalnya sh(yang sebenarnya ada dashdi Ubuntu):

    sh -c "time -f %Uuser ls >/dev/null"
  • Gunakan which, yang akan mencari melalui Anda $PATH(OK, ini konyol):

    $(which time) -f %Uuser ls >/dev/null
terdon
sumber
Apakah ada cara untuk melakukan yang sebaliknya - meniru built-in timedengan reguler /usr/bin/time? Yaitu untuk menerjemahkan skrip bash ke dasbor.
Dan M.
@DANM. Saya tidak mengerti. Jika Anda ingin builtin time, jalankan time. Jika Anda ingin eksekusi mandiri, jalankan /usr/bin/time.
terdon
tidak ada built-in timepada shell default Ubuntu sejauh yang saya ketahui. Saya ingin menerjemahkan skrip menggunakan built-in menjadi mandiri dengan perilaku yang sama.
Dan M.
@DANM. maka gunakan saja time. Itu akan memanggil mana saja yang tersedia. Itu akan menjadi builtin untuk bash dan standalone untuk dash. Jika Anda menggunakan /usr/bin/time, maka itu akan selalu memanggil standalone, baik dalam bash dan di dash. Tapi sepertinya Anda mungkin harus mengajukan pertanyaan baru, menjelaskan perilaku yang Anda butuhkan. Beri tahu saya jika Anda melakukannya dan saya akan mencoba dan membantu.
terdon
ya, tetapi built-in dan mandiri memiliki sintaks / semantik yang berbeda secara drastis. Bagaimanapun, terima kasih. Saya akan mengajukan pertanyaan baru jika saya tidak tahu bagaimana menghadapinya sendiri.
Dan M.
17

The bashdan zshkerang memiliki internal mereka timeperintah. Anda harus menggunakan

/usr/bin/time -f ...

BTW, saya menemukan bahwa menggunakan (dari zsh):

~% which  time
time: shell reserved word
Rmano
sumber