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 1
durch ein ersetzt wird, head -c 3
wenn das neue Zeilenzeichen nicht benötigt wird.
Illegal byte sequence
Fehler 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 5
durch die Anzahl der gewünschten Zeichen.
Wenn Sie sie jedoch aus irgendeinem Grund dekodieren müssen, gehen Sie base64
zum 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
cat
liest weit mehr als eine bestimmte Menge N
Zeichen und kann die Entropie erschöpfen. Nicht nützliche Antwort.
cat
beiden ist base64
und head
einen 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.
$()
?