Bash memiliki sleep "loadable" yang mendukung pecahan detik, dan menghilangkan overhead perintah eksternal:
$ cd bash-3.2.48/examples/loadables
$ make sleep && mv sleep sleep.so
$ enable -f sleep.so sleep
Kemudian:
$ which sleep
/usr/bin/sleep
$ builtin sleep
sleep: usage: sleep seconds[.fraction]
$ time (for f in `seq 1 10`; do builtin sleep 0.1; done)
real 0m1.000s
user 0m0.004s
sys 0m0.004s
The downside adalah bahwa loadable mungkin tidak disediakan dengan bash
biner Anda , jadi Anda perlu mengkompilasi sendiri seperti yang ditunjukkan (meskipun pada Solaris itu tidak harus sesederhana seperti di atas).
Padabash-4.4
(September 2016) semua loadable sekarang dibangun dan diinstal secara default pada platform yang mendukungnya, meskipun mereka dibangun sebagai file shared-object yang terpisah, dan tanpa .so
akhiran. Kecuali jika distro / OS Anda telah melakukan sesuatu yang kreatif, Anda seharusnya dapat melakukannya:
[ -z "$BASH_LOADABLES_PATH" ] &&
BASH_LOADABLES_PATH=$(pkg-config bash --variable=loadablesdir 2>/dev/null)
enable -f sleep sleep
(Halaman manual menunjukkan BASH_LOADABLES_PATH
diset secara otomatis, saya menemukan ini bukan kasus dalam distribusi resmi pada 4.4.12. Jika dan ketika diatur dengan benar Anda hanya perlu enable -f filename commandname
seperti yang diperlukan.)
Jika itu tidak cocok, hal termudah berikutnya yang harus dilakukan adalah membangun atau memperoleh sleep
dari GNU coreutils, ini mendukung fitur yang diperlukan. sleep
Perintah POSIX minimal, versi Solaris lama hanya mengimplementasikannya. Solaris 11 sleep
tidak mendukung detik pecahan.
Sebagai upaya terakhir, Anda dapat menggunakan perl
(atau skrip lain yang harus Anda tangani) dengan peringatan bahwa menginisialisasi juru bahasa mungkin sebanding dengan waktu tidur yang dimaksudkan:
$ perl -e "select(undef,undef,undef,0.1);"
$ echo "after 100" | tclsh