Вы можете попробовать поместить код AJAX в функцию setTimeout, если бэкэнд работает слишком быстро.
setTimeout(function(){
// put here your AJAX
}, 2000); // 2 seconds delay
files=(/my/dir/*)
printf "%s\n" "${files[RANDOM % ${#files[@]}]}"
И не анализируйте ls. Прочитайте http://mywiki.wooledge.org/ParsingLs
Править: Удача, находящая не -bash
решение это надежно. Большинство повредится для определенных типов имен файлов, таких как имена файлов с пробелами или новыми строками или тире (это в значительной степени невозможно в чистом sh
). Сделать его правильно без bash
, необходимо было бы полностью мигрировать на awk
/perl
/python
/... не передавая по каналу, которые производят для последующей обработки или такого.
Что-то как:
let x="$RANDOM % ${#file}"
echo "The randomly-selected file is ${path[$x]}"
$RANDOM
в ударе специальная переменная, которая возвращает случайное число, затем я использую подразделение модуля для получения допустимого индекса, затем ссылка, которые индексируют в массиве.
Я думаю, что Awk является хорошим инструментом для получения случайного числа. Согласно Усовершенствованному Руководству Bash, Awk является хорошей заменой случайного числа для $RANDOM
.
Вот версия Вашего сценария, который избегает инструменты GNU и измы Bash.
#! /bin/sh
dir='some/directory'
n_files=`/bin/ls -1 "$dir" | wc -l | cut -f1`
rand_num=`awk "BEGIN{srand();print int($n_files * rand()) + 1;}"`
file=`/bin/ls -1 "$dir" | sed -ne "${rand_num}p"`
path=`cd $dir && echo "$PWD/$file"` # Converts to full path.
echo "The randomly-selected file is: $path"
Это наследовало проблемы, которые упомянули другие ответы, должен файлы содержать новые строки.
Это сводится к: Как я могу создать случайное число в сценарии Unix портативным способом?
Поскольку, если у Вас есть случайное число между 1 и N, можно использовать head -$N | tail
сократить где-нибудь в середине. К сожалению, я не знаю портативного способа сделать это с одной только оболочкой. Если у Вас есть Python или Perl, можно легко использовать их случайную поддержку, но AFAIK, нет никакого стандарта rand(1)
команда.