Відповіді:
random="$(dd if=/dev/urandom bs=3 count=1)"
It treats the output of a command like a variable.
ви насправді маєте на увазі як рядок, правда?
$()
є досить універсальним, не специфічним для bash. BTW, будьте обережні, що ви не стикаєтесь з обмеженнями того, які символи оболонка може зберігати у змінних - наприклад, версія тестування, яку я тестував, випускає з рядка нулі (\ 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
якщо новий рядок не потрібен в кінці.
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
$()
працює?