Antworten:
random="$(dd if=/dev/urandom bs=3 count=1)"
It treats the output of a command like a variable.du eigentlich als String, oder?
$()ist ziemlich universell, nicht bash-spezifisch. Übrigens: Achten Sie darauf, dass Sie nicht an die Grenzen der Zeichen gebunden sind, die die Shell in Variablen speichern kann. Beispielsweise lässt die von mir getestete Version von Bash Nullen (\ x00) aus der Zeichenfolge aus.
head -c 500 /dev/urandom | tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
(Wenn Sie wörtliche Bindestrichzeichen verwenden möchten, muss das Bindestrichzeichen im Gegensatz zu am Ende der Zeichenfolge stehen *-_.)
Und um zu erklären, was aufgrund des obigen Satzes von Befehlen gemacht wird:
head -c 500 /dev/urandom: Erhalten Sie die ersten 500 Zeichen (Bytes) von /dev/urandom.tr -dc 'a-zA-Z0-9~!@#$%^&*_-': Entfernen Sie alle Zeichen außer den in angegebenen 'a-zA-Z0-9~!@#$%^&*_-'aus der Ausgabe des ersten Befehls.fold -w 3: Formatieren Sie die Ausgabe des zweiten Befehls so, dass er 3 Zeichen pro Zeile enthält. head -n 1: Zeigt die erste Zeile des Ergebnisses des dritten Befehls an stdout.fold -w 3 | head -n 1durch ein ersetzt wird, head -c 3wenn das neue Zeilenzeichen nicht benötigt wird.
Illegal byte sequenceFehler fehl . Um dies zu beheben, verwenden Sie die "C" -Codierung. Ändern Sie den Befehl in:head -c 500 /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
Bitte überprüfen Sie man od.
Sie können zum Beispiel verwenden
od -vAn -N4 -tu4 < /dev/urandom
vorzeichenlose dezimale 4-Byte-Zufallszahlen zu generieren.
Hier ist eine, die Base64-Strings erstellt. Beachten Sie, dass, obwohl sie auf Base64-Strings beschränkt sind, die Auffüllung von ihnen entfernt wird, sodass Sie sie nicht entschlüsseln können und sie wahrscheinlich sowieso nicht benötigen.
cat /dev/urandom | base64 | head -c 5
Ersetzen Sie 5durch die Anzahl der gewünschten Zeichen.
Wenn Sie sie jedoch aus irgendeinem Grund dekodieren müssen, gehen Sie base64zum Ende der Pipe. Es werden dann 5 Zeichen aus urandom gesammelt und base64 codiert mit der richtigen Polsterung, aber die letzte Zeichenfolge ist möglicherweise länger als gewünscht, da die Polsterung erfolgt.
cat /dev/urandom | head -c 5 | base64
catliest weit mehr als eine bestimmte Menge NZeichen und kann die Entropie erschöpfen. Nicht nützliche Antwort.
catbeiden ist base64und headeinen Dateinamen als Argument nehmen kann, funktioniert dies in diesem Fall und sollte die Entropie nicht erschöpfen. Siehe stackoverflow.com/questions/10031344/…
Versuche dies: dd if=/dev/urandom bs=1 count=3
Wenn Sie das Ergebnis in $ variable schreiben wollen:
variable=`dd if=/dev/urandom bs=1 count=3`
Beachten Sie, dass es wahrscheinlich nicht druckbar sein wird.
$()?