Bash, kesirli saniyeleri destekleyen ve harici bir komutun genel giderlerini ortadan kaldıran "yüklenebilir" bir uyuma sahiptir:
$ cd bash-3.2.48/examples/loadables
$ make sleep && mv sleep sleep.so
$ enable -f sleep.so sleep
Sonra:
$ 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
Dezavantajı, yüklerin bash
ikili sisteminizle sağlanamayabileceğidir , bu yüzden bunları gösterildiği gibi kendiniz derlemeniz gerekir (Solaris'te yukarıdaki kadar basit olması gerekmez).
İtibariylebash-4.4
(Eylül 2016) tüm loadables şimdi inşa edilir ve bunlar ayrı paylaşılan nesne dosyaları olarak inşa edilmiş olsa da, bunu destekleyecek platformlarda varsayılan olarak yüklü ve olmadan .so
son eki. Dağıtımınız / işletim sisteminiz yaratıcı bir şey yapmadıysa, bunun yerine şunları yapmalısınız:
[ -z "$BASH_LOADABLES_PATH" ] &&
BASH_LOADABLES_PATH=$(pkg-config bash --variable=loadablesdir 2>/dev/null)
enable -f sleep sleep
(Man sayfasının ima ettiği BASH_LOADABLES_PATH
otomatik olarak ayarlanır, bunun resmi dağıtımda 4.4.12 itibariyle geçerli olmadığını buldum. Doğru ayarlanmışsa ve sadece enable -f filename commandname
gerektiği gibi yapmanız gerekir .)
Bu uygun değilse, yapılacak en kolay şey sleep
GNU coreutils'ten derlemek veya elde etmek , istenen özelliği destekler. POSIX sleep
komutu minimaldir, sadece eski Solaris sürümleri uygulanır. Solaris 11 sleep
, kesirli saniyeleri destekler.
Son çare olarak perl
, tercümanı başlatan amaçlanan uyku süresiyle karşılaştırılabilir olabilecek ihtar ile (ya da kullanmanız gereken herhangi bir komut dosyasını) kullanabilirsiniz.
$ perl -e "select(undef,undef,undef,0.1);"
$ echo "after 100" | tclsh