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).


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.