Bash: как сделать короткую задержку?

Как сделать короткую задержку (менее чем на секунду) в bash? Наименьшая единица времени в команде сна - 1 сек. Я использую bash 3.0 в SunOS 5.10.

6 ответов


SunOS (Solaris), вероятно, не имеет инструментов GNU, установленных по умолчанию. Вы можете рассмотреть возможность их установки. Также возможно, что они уже установлены в вашей системе, возможно, в каком-то каталоге, которого нет в вашем default $PATH. GNU sleep является частью пакета coreutils.

если у вас есть Perl, то это:

perl -MTime::HiRes -e 'Time::HiRes::usleep 500000'

должен спать в течение 500000 микросекунд (0,5 секунды), но накладные расходы на вызов perl существенны.

для минимальные накладные расходы, я бы написал небольшую программу на C, которая вызывает usleep() или nanosleep(). Обратите внимание, что usleep() может не обрабатывать интервалы больше 1 секунды.


Я не знаю, в какой версии это было реализовано, но моя версия sleep (v6.12) принимает десятичные дроби. sleep 0.5 строительство.

Если ваш слишком стар для этого, короткая программа python или C, вероятно, будет вашим единственным решением.


напишите это в " usleep.c"

#include <unistd.h>
#include <stdlib.h>
int main(int argc, char **argv) {
    usleep( atol( argv[1] ) );
}

и типа

make usleep
./usleep 1000000

вы пробовали смотреть на man-страницы? У него должен быть способ сделать задержку меньше секунды, я сейчас не машина Linux, поэтому не могу найти ее для вас.


вы можете использовать usleep. Вот ссылка на man-страницу:http://linuxmanpages.com/man1/usleep.1.php


очень очень очень просто pythonesque usleep в десятичных секундных дробях. Это не очень точно, и нет проверки ошибок в командной строке args

#!/usr/bin/python
import sys
import time

if len(sys.argv) == 1:
    sleepTime = 1.0
else:
    sleepTime = str(sys.argv[1])

time.sleep(float(sleepTime))