बैश में एक "लोड करने योग्य" नींद है जो आंशिक सेकंड का समर्थन करती है, और एक बाहरी आदेश के ओवरहेड्स को समाप्त करती है:
$ cd bash-3.2.48/examples/loadables
$ make sleep && mv sleep sleep.so
$ enable -f sleep.so sleep
फिर:
$ 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
नकारात्मक पक्ष यह है कि लोडेबल्स आपके bash
बाइनरी के साथ प्रदान नहीं किए जा सकते हैं , इसलिए आपको उन्हें खुद को संकलित करने की आवश्यकता होगी जैसा कि दिखाया गया है (हालांकि सोलारिस पर यह जरूरी नहीं है कि ऊपर जैसा सरल होगा)।
के रूप मेंbash-4.4
(सितंबर 2016) सभी loadables अब निर्माण कर रहे हैं और प्लेटफार्मों कि यह समर्थन करते हैं, हालांकि वे अलग साझा-वस्तु फ़ाइलों के रूप में बनाया जाता है पर डिफ़ॉल्ट रूप से स्थापित है, और एक के बिना .so
प्रत्यय। जब तक आपके डिस्ट्रो / ओएस ने कुछ रचनात्मक नहीं किया है, आपको इसके बजाय सक्षम होना चाहिए:
[ -z "$BASH_LOADABLES_PATH" ] &&
BASH_LOADABLES_PATH=$(pkg-config bash --variable=loadablesdir 2>/dev/null)
enable -f sleep sleep
(मैन पेज का तात्पर्य BASH_LOADABLES_PATH
स्वचालित रूप से सेट है, मुझे लगता है कि यह आधिकारिक वितरण में 4.4.12 के मामले में नहीं है। यदि और जब इसे सही ढंग से सेट किया गया है, तो आपको केवल enable -f filename commandname
आवश्यकतानुसार आवश्यक है।)
यदि यह उपयुक्त नहीं है, तो करने के लिए अगली सबसे आसान चीज sleep
जीएनयू कोरुटिल्स का निर्माण या प्राप्त करना है , यह आवश्यक सुविधा का समर्थन करता है। POSIX sleep
कमांड न्यूनतम है, पुराने सोलारिस संस्करणों को केवल उसी पर लागू किया गया है। सोलारिस 11sleep
आंशिक सेकंड का समर्थन करता है ।
एक अंतिम उपाय के रूप में आप उपयोग कर सकते हैं perl
(या किसी भी अन्य स्क्रिप्टिंग जिसे आपको हाथ करना होगा) कैविटी के साथ है कि दुभाषिया को शुरू करने का इरादा सोने के समय से तुलनीय हो सकता है:
$ perl -e "select(undef,undef,undef,0.1);"
$ echo "after 100" | tclsh