Bash มีโหมด "loadable" ซึ่งรองรับเสี้ยววินาทีและกำจัดค่าโสหุ้ยของคำสั่งภายนอก:
$ 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
ไบนารีของคุณดังนั้นคุณจะต้องรวบรวมพวกเขาด้วยตัวเองดังที่แสดง (แม้ว่าใน Solaris มันไม่จำเป็นต้องง่ายเหมือนข้างต้น)
ณ วันที่bash-4.4
(กันยายน 2016) โหลดทั้งหมดจะถูกสร้างและติดตั้งตามค่าเริ่มต้นบนแพลตฟอร์มที่รองรับแม้ว่าจะถูกสร้างเป็นไฟล์วัตถุที่แชร์ที่แยกกันและไม่มี.so
คำต่อท้าย ยกเว้นว่า distro / OS ของคุณทำอะไรที่สร้างสรรค์แล้วคุณควรจะทำได้:
[ -z "$BASH_LOADABLES_PATH" ] &&
BASH_LOADABLES_PATH=$(pkg-config bash --variable=loadablesdir 2>/dev/null)
enable -f sleep sleep
(หน้า man หมายถึงการBASH_LOADABLES_PATH
ตั้งค่าโดยอัตโนมัติฉันคิดว่านี่ไม่ใช่กรณีในการจัดจำหน่ายอย่างเป็นทางการ ณ วันที่ 4.4.12 ถ้าและเมื่อมันถูกตั้งค่าอย่างถูกต้องคุณต้องenable -f filename commandname
เท่าที่จำเป็น)
หากไม่เหมาะสมสิ่งที่ง่ายที่สุดที่จะทำต่อไปคือสร้างหรือรับsleep
จากแกนกลาง GNU สิ่งนี้จะสนับสนุนคุณสมบัติที่ต้องการ sleep
คำสั่งPOSIX มีน้อยที่สุดรุ่น Solaris ที่เก่ากว่าจะมีการใช้งานเพียงอย่างเดียว Solaris 11 sleep
ไม่สนับสนุนวินาทีเศษส่วน
เป็นทางเลือกสุดท้ายที่คุณสามารถใช้perl
(หรือสคริปต์อื่น ๆ ที่คุณต้องทำ) กับข้อแม้ที่การเริ่มต้นล่ามอาจเทียบเคียงได้กับเวลาพักเครื่อง:
$ perl -e "select(undef,undef,undef,0.1);"
$ echo "after 100" | tclsh