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 1par un head -c 3si le nouveau caractère de ligne n'est pas nécessaire à la fin.
Illegal byte sequenceerreur. 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 5par le nombre de caractères souhaité.
Si vous avez toutefois besoin de les décoder pour une raison quelconque, déplacez-vous base64jusqu'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
catlira beaucoup plus qu'une quantité donnée de Ncaractères, et peut épuiser l'entropie. Pas de réponse utile.
catpuisque les deux base64et headpeut 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?