Menggunakan perintah "waktu" bawaan di bash daripada perintah eksternal

12

Bekerja dengan timeperintah, saya menemukan situasi di mana saya harus menggunakan perintah waktu built-in timedaripada eksternal GNU /usr/bin/time. Jadi, bagaimana saya bisa melakukan ini? Saya melihat suatu tempat yang menggunakan enabledan / ataucommand akan membantu, tetapi mereka tidak.

Ini adalah kasus penggunaan:

watch "time ls"

yang menggunakan /usr/bin/timeperintah eksternal , yang tidak saya inginkan! Ini terjadi ketika timemenjalankan fungsi bash internal ketika saya menjalankan time lsterminal, seperti ini:

$ time ls

Harap dicatat bahwa permintaan sebaliknya telah dijawab di sini:

Ada banyak perbedaan dengan dua perintah. Internal timelebih tepat (yang saya inginkan), tetapi perintah eksternal memiliki lebih banyak opsi (yang saya tidak perlu).

Ho1
sumber
watch 'bash -c "builtin time ls"'mungkin?
glenn jackman
1
lihat di sini tentang cara memaksa bash untuk menggunakan builtin, lihat answer2 oleh Petr Utzl: builtin timeharus melakukan trik.
Fiximan
2
@Fiximan, timebukan builtin in bash, ini adalah kata khusus dari bahasa sehingga Anda dapat mengatur waktu pipa (seperti time foo | bar) atau perintah majemuk (seperti time for i in...;done)
Stéphane Chazelas

Jawaban:

13

Secara default, watchjalankan perintah Anda dengan /bin/sh -c '...'begitu output yang Anda lihat adalah bagaimana /bin/shmenginterpretasikan timeperintah. Anda /bin/shtampaknya tidak memiliki builtin sebuah time.

Untuk menjalankan perintah dengan shell yang berbeda, gunakan -xopsi untuk menyingkirkan default, kemudian tambahkan permintaan eksplisit Anda sendiri dari shell yang builtin yang Anda inginkan.

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

Tidak peduli bagaimana Anda menjalankan watch, perintah yang Anda tonton bukanlah anak dari shell yang menjalankan watchperintah, sehingga pengaturan shell tidak secara langsung relevan.

Stéphane Chazelas
sumber