Відповіді:
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 1a, 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
$()працює?