random="$(dd if=/dev/urandom bs=3 count=1)"
read /dev/urandom 3
O texto acima não está funcionando.Como posso ler bytes aleatórios de /dev/urandom
no bash?
head -c 500 /dev/urandom | tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
(Se você quiser caracteres traços literais, o caractere traço deve ir no final da string como feito acima, ao contrário de *-_
).
E para explicar o que é feito devido ao conjunto de comandos acima:
head -c 500 /dev/urandom
: Obtenha os primeiros 500 caracteres (bytes) de /dev/urandom
. tr -dc 'a-zA-Z0-9~!@#$%^&*_-'
: remova todos menos os caracteres especificados em 'a-zA-Z0-9~!@#$%^&*_-'
da saída do primeiro comando. fold -w 3
: formata a saída do segundo comando de forma que tenha 3 caracteres por linha. head -n 1
: Exibe a primeira linha do resultado do terceiro comando em stdout
. Por favor, verifique man od
.
Você pode usar, por exemplo
od -vAn -N4 -tu4 < /dev/urandom
para gerar números aleatórios de 4 bytes decimais não assinados.
Aqui está um que cria strings base64, note que mesmo que eles estejam limitados a strings base64, o preenchimento é removido deles, então você não pode decodificá-los, você provavelmente não precisará dele de qualquer maneira.
cat /dev/urandom | base64 | head -c 5
Substitua 5
pelo número de caracteres que você deseja.
Se, no entanto, precisar decodificá-los, mova base64
para o final do canal. Em seguida, ele coletará 5 caracteres do urandom e o base64 o codificará com o preenchimento correto, mas a string final pode ser mais longa do que o desejado devido ao preenchimento.
cat /dev/urandom | head -c 5 | base64
Tente isto: dd if=/dev/urandom bs=1 count=3
Se você quiser colocar o resultado em $ variable:
variable='dd if=/dev/urandom bs=1 count=3'
Observe que provavelmente não será imprimível.
A solução mais fácil seria tão simples quanto:
$ head -cN /dev/urandom