Я бы хотел перемешать вывод find
НО с фиксированным начальным числом, чтобы при каждом запуске команды получался один и тот же вывод.
Вот как я перетасовываю:
find . -name '*.wav' | shuf
Проблема в том, что каждый раз, когда у нас есть новое семя -> новый порядок. Моя попытка исправить это:
find . -name '*.wav' | shuf --random-source=<(echo 42)
Это работает только в некоторых случаях (т.е. только в нескольких случаях, детерминистически c). В большинстве случаев происходит сбой:
shuf: '/ proc / self / fd / 12': конец файла
Та же ошибка возникает, например,
seq 1 100 | sort -R --random-source=<(echo 42)
То, что я видел, использовалось в других местах .
Хотя это работает:
printf '%s\n' a b c | shuf --random-source=<(echo 42)
Почему это так? И как я могу это исправить? Я открыт для любых предложений. Вывод find
является частью большего скрипта. Решение должно работать для bash
и zsh
.
Почему мое решение не сработало (EDIT)
Благодаря @franzisk и @Inian я думаю, что теперь я понимаю, почему мое первоначальное решение не сработало. Я смотрел на --random-source
как на поиск, а это, ну, «случайный источник» = источник случайности. Мой echo 42
просто не дает достаточно энтропии для чего-либо длиннее нескольких строк. Вот почему это сработало только в нескольких случаях!
«Заполнение» (как при отправке) выполняет большое количество байтов, поскольку обеспечивает достаточную энтропию.