Если выход оболочки достаточно, можно использовать $'\xHH'
синтаксис как это:
grep -v "<["$'\x09\x00'"-"$'\x09\x7F'"]*\s"
Это достаточно для Вашего варианта использования?
Если Вы хотите управление с более прекрасными зернами, чем хорошие заклинания удара maxschlepzig, это - довольно легкая вещь просто кодировать:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
int main(int argc, char**argv){
useconds_t mdelay=0, delay;
if (argc<3){
fprintf(stderr,"%s <delay (in milli-seconds)> <command> <args>* :\n\trun commands with a random delay\n",argv[0]);
exit(1);
}
mdelay=atol(argv[1]);
/* seed random number generator with the time */
srand(((unsigned int)time(NULL))%RAND_MAX);
delay = mdelay * (rand() / (1.0 + RAND_MAX));
usleep(delay*1000);
execvP(argv[2],getenv("PATH"),argv+2);
return 0;
}
Скомпилируйте с чем-то как gcc randomdelay.c -o randomdelay
и вызовите его как
$ randomdelay 10000 echo Hi!
Если Вы делаете, это - контекст программирования, Вы могли бы быть более обеспечены просто захват части кода, который выбирает случайную задержку Вас и звонит exec
функция семейства (то, какой Вы хотите, зависит от точно, как у Вас есть указанный внутренне).
Выйдите здесь:
rand
/srand
нормальны (не хороший PRNGs, обратите внимание, просто, что они делают то, что в странице справочника говорится, что они делают). Я испытывал некоторые затруднения из-за него на моем поле Mac OS X, где те функции удерживаются от использования в пользу random
/srandom
.rand
имели плохие числовые характеристики. Это не должно быть проблемой в этом приложении, но если это, замените его лучшим PRNG.В bash
можно сделать это как это:
sleep $(($RANDOM%3)) && some_command
таким образом ожидая между 0 и 2 секундами прежде, чем выполнить команду. Или выберите другой интервал.
Или если $RANDOM
не доступно, можно попробовать jot
:
sleep `jot -r 1 0 3` && some_command
Несомненно, случайное ожидание плюс выполнение не обеспечивается единственным двоичным файлом, но близко. Ну, наличие единственного двоичного файла было бы менее ортогональным, это отчасти будет против one-tool-for-one-job-principle (и keep-it-simple-principle (KISS)).
Самое простое sleep
команда. Запускать Вашу программу десять секунд от nowdo что-то вроде этого:
sleep 10 && your_command
Затем, если бы Вам нужно немного больше изощренности, был бы at
планировщик. Вы могли запланировать задачу работать через час как так:
echo "your_command" | at +1 hour
$RANDOM
). Это также походит на метод "сценария", которого он хочет избежать - он хочет двоичный файл, который делает это по некоторым причинам
– Michael Mrozek♦
08.06.2011, 23:43