Réponses:
random="$(dd if=/dev/urandom bs=3 count=1)"
It treats the output of a command like a variable.
vous voulez dire en tant que chaîne, n'est-ce pas?
$()
est assez universel, pas spécifique à Bash. En passant, faites attention de ne pas rencontrer de limitations sur les caractères que le shell peut stocker dans les variables - par exemple, la version de bash que j'ai testée avec des valeurs nulles (\ x00) dans la chaîne.
head -c 500 /dev/urandom | tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
(Si vous voulez des tirets littéraux, le tiret doit être placé à la fin de la chaîne, comme indiqué ci-dessus, par opposition à *-_
).
Et pour expliquer ce qui est fait grâce à l'ensemble de commandes ci-dessus:
head -c 500 /dev/urandom
: Obtenir les 500 premiers caractères (octets) de /dev/urandom
.tr -dc 'a-zA-Z0-9~!@#$%^&*_-'
: Supprime tous les caractères spécifiés dans 'a-zA-Z0-9~!@#$%^&*_-'
de la sortie de la première commande.fold -w 3
: Formate la sortie de la deuxième commande de telle sorte qu'elle ait 3 caractères par ligne. head -n 1
: Affiche la première ligne du résultat de la troisième commande sur stdout
.fold -w 3 | head -n 1
par un head -c 3
si le nouveau caractère de ligne n'est pas nécessaire à la fin.
Illegal byte sequence
erreur. Pour résoudre ce problème, utilisez le codage "C"; changez la commande en:head -c 500 /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
S'il vous plaît vérifier man od
.
Vous pouvez utiliser, par exemple
od -vAn -N4 -tu4 < /dev/urandom
générer des nombres aléatoires non signés de 4 octets non signés.
En voici un qui crée des chaînes base64; notez que même si elles sont limitées à des chaînes base64, le remplissage leur est enlevé. Par conséquent, vous ne pouvez pas les décoder, vous n'en aurez probablement pas besoin de toute façon.
cat /dev/urandom | base64 | head -c 5
Remplacez-le 5
par le nombre de caractères souhaité.
Si vous avez toutefois besoin de les décoder pour une raison quelconque, déplacez-vous base64
jusqu'au bout du tuyau. Il va ensuite collecter 5 caractères d'urandom et base64 l'encoder avec le bon remplissage, mais la chaîne finale risque d'être plus longue que ce que vous vouliez en raison du remplissage.
cat /dev/urandom | head -c 5 | base64
cat
lira beaucoup plus qu'une quantité donnée de N
caractères, et peut épuiser l'entropie. Pas de réponse utile.
cat
puisque les deux base64
et head
peut prendre un nom de fichier comme argument, dans ce cas , il fonctionne et ne doit pas appauvrir l'entropie. Voir stackoverflow.com/questions/10031344/…
Essaye ça: dd if=/dev/urandom bs=1 count=3
Si vous voulez mettre le résultat dans $ variable:
variable=`dd if=/dev/urandom bs=1 count=3`
Notez que ce ne sera probablement pas imprimable.
La solution la plus simple serait aussi simple que:
$ head -cN /dev/urandom
$()
marche?