Ответы:
random="$(dd if=/dev/urandom bs=3 count=1)"
It treats the output of a command like a variable.
ты ведь имеешь в виду строку, верно?
$()
довольно универсальный, а не специфичный для bash. Кстати, будьте осторожны, вы не столкнетесь с ограничениями на то, какие символы оболочка может хранить в переменных - например, версия bash, которую я тестировал, опускает нули (\ x00) из строки.
head -c 500 /dev/urandom | tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
(Если вам нужны буквальные тире-символы, этот тире-символ должен идти в конце строки, как сделано выше, в отличие от *-_
).
И чтобы объяснить, что делается благодаря вышеупомянутому набору команд:
head -c 500 /dev/urandom
: Получить первые 500 символов (байтов) из /dev/urandom
.tr -dc 'a-zA-Z0-9~!@#$%^&*_-'
: Удалить все символы, кроме указанных в 'a-zA-Z0-9~!@#$%^&*_-'
выводе первой команды.fold -w 3
: Отформатируйте вывод второй команды так, чтобы в каждой строке было 3 символа. head -n 1
: Показать первую строку результата третьей команды вкл stdout
.fold -w 3 | head -n 1
a, head -c 3
если в конце новая строка char не нужна.
Illegal byte sequence
ошибкой. Чтобы это исправить, используйте кодировку "C"; измените команду на:head -c 500 /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
Пожалуйста, проверьте man od
.
Вы можете использовать, например,
od -vAn -N4 -tu4 < /dev/urandom
генерировать случайные числа 4 байта без знака.
Вот тот, который создает строки base64, обратите внимание, что, хотя они ограничены строками base64, отступы удаляются из них, поэтому вы не можете их декодировать, возможно, вам это все равно не понадобится.
cat /dev/urandom | base64 | head -c 5
Замените 5
количество символов, которые вы хотите.
Однако если вам по каким-то причинам необходимо декодировать их, перейдите base64
к концу канала. Затем он соберет 5 символов из urandom и base64 закодирует его с правильным заполнением, но итоговая строка может быть длиннее, чем вы хотели из-за заполнения.
cat /dev/urandom | head -c 5 | base64
cat
будет читать намного больше, чем заданное количество N
символов, и может истощить энтропию. Не полезный ответ.
cat
так как base64
и head
может взять имя файла в качестве аргумента, в данном случае он работает и не должен истощать энтропию. См stackoverflow.com/questions/10031344/...
Попробуй это: dd if=/dev/urandom bs=1 count=3
Если вы хотите поместить результат в переменную $:
variable=`dd if=/dev/urandom bs=1 count=3`
Обратите внимание, что это, вероятно, не будет для печати.
Самое простое решение будет таким простым:
$ head -cN /dev/urandom
$()
работает?