Respuestas:
random="$(dd if=/dev/urandom bs=3 count=1)"
It treats the output of a command like a variable.
realidad te refieres a una cuerda, ¿verdad?
$()
es bastante universal, no específico de bash. Por cierto, tenga cuidado de no encontrarse con limitaciones sobre qué caracteres puede almacenar el shell en las variables, por ejemplo, la versión de bash que probé deja fuera los nulos (\ x00) de la cadena.
head -c 500 /dev/urandom | tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
(Si desea caracteres de guión literales, el carácter de guión debe ir al final de la cadena como se hizo anteriormente, en lugar de *-_
).
Y para explicar lo que se hace debido al conjunto de comandos anterior:
head -c 500 /dev/urandom
: Obtenga los primeros 500 caracteres (bytes) de /dev/urandom
.tr -dc 'a-zA-Z0-9~!@#$%^&*_-'
: Elimina todos los caracteres, excepto los especificados, 'a-zA-Z0-9~!@#$%^&*_-'
de la salida del primer comando.fold -w 3
: Formatee la salida del segundo comando de modo que tenga 3 caracteres por línea. head -n 1
: Muestra la primera línea del resultado del tercer comando en stdout
.fold -w 3 | head -n 1
por a head -c 3
si no se necesita la nueva línea char al final.
Illegal byte sequence
error. Para arreglar eso, use la codificación "C"; cambie el comando a:head -c 500 /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
Por favor verifique man od
.
Puedes usar, por ejemplo
od -vAn -N4 -tu4 < /dev/urandom
para generar números aleatorios decimales sin signo de 4 bytes.
Aquí hay uno que crea cadenas de base64, tenga en cuenta que a pesar de que están limitadas a cadenas de base64, el relleno se elimina de ellas, por lo que no puede decodificarlas, probablemente no lo necesitará de todos modos.
cat /dev/urandom | base64 | head -c 5
Reemplace 5
con la cantidad de caracteres que desea.
Sin embargo, si necesita decodificarlos por alguna razón, muévase base64
al final de la tubería. Luego recopilará 5 caracteres de urandom y codificará en base64 con el relleno correcto, pero la cadena final puede ser más larga de lo que desea debido al relleno.
cat /dev/urandom | head -c 5 | base64
cat
leerá mucho más que una cantidad dada de N
caracteres, y puede agotar la entropía. Respuesta no útil
cat
ambos base64
y head
puede tomar un nombre de archivo como argumento, en este caso funciona y no debería agotar la entropía. Ver stackoverflow.com/questions/10031344/…
Prueba esto: dd if=/dev/urandom bs=1 count=3
Si quieres poner el resultado en $ variable:
variable=`dd if=/dev/urandom bs=1 count=3`
Tenga en cuenta que probablemente no será imprimible.
La solución más fácil sería tan simple como:
$ head -cN /dev/urandom
$()
funciona?