Obwohl ich seit 20 Jahren GNU/Linux-Systeme verwende, bietet die Kommandozeile immer wieder ein Füllhorn an Überraschungen und Neuentdeckungen. Zugegeben – das ist ein kurzer Artikel mit wenig Blabla. Wahrscheinlich frisst das Titelbild mehr Speicherplatz, als der gesamte Text. Aber egal – mir hat meine neueste Entdeckung gefallen und deshalb teile ich sie mit euch.
Wie die Lateiner unter den Lesern wissen, stand Iulius Caesar am 10. Januar 49 v. Chr. mit seiner Armee vor der Überquerung des Grenzflusses Rubikon. Nach einigem Zögern und Zaudern, sagte er:
Dorthin gehe es, wohin der Götter Zeichen und der Feinde Unrecht ruft. Geworfen ist der Würfel (alea iacta est).
Damit machte Caesar deutlich, dass seine Tat unwiderruflich Folgen haben würde, deren Ausgang jedoch noch nicht absehbar war.
Ganz so dramatisch geht es bei der Verwendung des CLI-Befehls shuf nicht zu. Aber praktisch ist er. Mit diesem Befehl generiert man zufällige Permutationen. Grämt euch nicht, wenn ihr nicht mehr wisst, was Permutationen sind. Hier sind ein paar Beispiele, um die Nützlichkeit des Befehls zu zeigen. Öffnet ein Terminal und macht es nach.
Der Lottotipp
shuf -n 6 -i 1-49
5
3
14
42
47
35
shuf steht für shuffle, also mischen. Im obigen Beispiel wird der Befehl mit zwei Argumenten aufgerufen: -n für die Anzahl (6 Zahlen) und -i für das Intervall (Zahlen zwischen 1 und 49).
Zwei Würfel
shuf -n 2 -i 1-6
2
4
Da gibt es nicht viel zu erklären: zwei Zahlen zwischen 1 und 6.
Nachtrag: Es gibt doch viel zu erklären. Lest das bitte in den Kommentaren nach, damit ich es hier nicht wiederholen muss. Der korrekte Würfelbefehl lautet:
shuf -r -n 2 -i 1-6
Wie sollen meine Neugeborenen heissen?
shuf -n 3 namen.txt
Sophie
Marlon
Lara
Die beliebtesten Vornamen für das Jahr 2025 findet ihr hier. Diese kopiert ihr in die Datei namen.txt und lasst shuf entscheiden, wie euer Nachwuchs heissen soll. Das ist ein wenig nerdig, aber: Alea iacta est!
Titelbild: https://pixabay.com/photos/dice-gambling-gamble-risk-3116778/
Quellen:
https://de.wikipedia.org/wiki/Alea_iacta_est
Ich fürchte das mit den Namen hat leider einen eher geringen WAF...
À propos nerdig: shuf kann auf die beschriebene Art nicht zwei Würfel ersetzen. Am leichtesten zeigt sich dass, wenn versucht wird, sieben Würfel zu simulieren. Pasch-Würfe sind z.b. mit
for i in zwei mal; do echo -n $(( 1 + $RANDOM % 6 )) " "; done
nicht ausgeschlossen.shuf liefert n zufällige elemente aus dem interval i.
damit ist shuf für die lottozahlen geeignet, denn es werden 6 elemente aus dem interval 1-49 ausgewählt.
aber shuf ist nicht für das würfeln geeignet: shuf -n 2 -i 1-6 liefert zwei elemente aus dem intervall 1-6. beim würfeln könnte es auch zu zwei gleichen elementen auf beiden würfeln kommen, nämlich zweimal eins oder zweimal zwei, usw. diese ergebnisse liefert shuf nicht.
man kann mit einen würfel auch 10 mal würfeln, das müsste bei shuf also shuf -n 10 -i 1-6 sein. das funktioniert aber nicht da shuf nur maximal die 6 elemente aus der menge von 1-6 liefert.
also vorsichtig mit shuf. es ist kein würfel ersatz, sondern nur eine auswahl aus n elemente aus einem interval, wobei keine doppelten ergebnisse vorkommen können.
Stimmt. Danke. Dann eben so:
repeat 2 shuf -n 1 -i 1-6
Das funktioniert zumindest in der Z-Shell.
RTFM! (Das ich das nochmal schreiben darf :-D)
Das bringt shuf doch schon mit, mit der Option
-r, --repeat
:shuf -r -n 2 -i 1-6
s.
man shuf
Aha. Somit taugt shuf doch als Würfel. Im Gegensatz zu meinem repeat, wiederholt der Parameter -r nicht den Befehl, sondern erlaubt sich wiederholende Ausgaben, was man gut am 7-er Beispiel sehen kann:
shuf -r -n 7 -i 1-6
Asche auf mein Haupt.... Wer die manpages lesen kann, ist klar im Vorteil.
jedenfalls dank an ralf für die vorstellung. ich kannte die funktion bis jetzt noch nicht.
Dadurch wird mein Lottozahlengenerator völlig überflüssig. Ich kannte shuf noch nicht. Irre was es alles gibt.
Das kannte ich auch noch nicht, ist sozusagen das gleichzeitig das Gegenteil von
sort
unduniq
, wobei ich zugegebenermaßen wenig Anwendung fürshuf
finden werde.