Il semble que la commande strings
respecte maintenant les paramètres régionaux de l'environnement, en particulier
LC_CTYPE
Cette variable détermine la catégorie locale pour les fonctions de traitement des caractères, telles que tolower(), toupper() et isalpha(). Cette variable d'environnement détermine l'interprétation des séquences d'octets de données textuelles en tant que caractères (par exemple, caractères mono-octet par opposition à multi-octets), la classification des caractères (par exemple, alpha, numérique, graphique) et le comportement des classes de caractères. Les sémantiques supplémentaires de cette variable, le cas échéant, dépendent de l'implémentation.
En définissant LC_CTYPE
sur C
, le comportement précédent est rétabli :
% cat /dev/urandom | LC_CTYPE=C strings -n 16
X! \*H=:e9c1`nzWk
$Hr/Q9q_b:BE-tS,[
/]59=+fPU"x-B9kk
:"*J9{5Q-tFpL=Xm$>
...
Une approche alternative (issue de Shell Script /dev/urandom sur Stack Overflow avec des modifications mineures) consiste à filtrer les caractères non imprimables avec l'outil tr
et à prendre les 16 premiers caractères avec dd
:
% cat /dev/urandom | LC_CTYPE=C tr -dc '[:print:]' | dd bs=16 count=1 2> /dev/null
Ceci est beaucoup plus rapide car il ne attend pas 16 caractères imprimables consecutifs de la source aléatoire.