Я пытаюсь сгенерировать буквенно-цифровую строку из восьми символов, используя POSIX-совместимые инструменты оболочки.Я пытаюсь использовать / dev / urandom для создания этой строки (кстати, я не знал, что / dev / random и / dev / urandom не указаны в POSIX, но я собираюсь сделать это, потому что они присутствуют в Linux,FreeBSD, Mac OS, AIX и т. Д.)
Существует множество руководств, показывающих, как это можно сделать, но ни одно из найденных мною близко к правильной постановке.В частности, я продолжаю видеть использование head -c (аргумент -c не определен в POSIX), как показано ниже:
head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo ''
Другая проблема, с которой я столкнулся, заключается в том, что почти ни одно из увиденных мной решений не относится кРазница между потоком байтов и потоком символов, что заставляет меня беспокоиться о том, что я создаю небезопасные строки.
Это лучшее, что я могу придумать, но я не до конца понимаю:
strings -n 1 < /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1
Он совместим с POSIX (за исключением / dev / urandom), но правильно ли я достиг своей цели?Если так, есть ли лучший способ достичь этой цели?Также было бы здорово, если бы был способ создать случайную строку без / dev / urandom, но я думаю, что я об этом мечтаю.