Wie kann ich die Ausgabe von 'echo' verlangsamen?
Hallo an alle Kenner der bash
Ich wollte gerne einen String, der von 'echo' ausgegeben wird, mit verminderter Geschwindigkeit ausgeben lassen. Beispielsweise ein simples:
echo "Hallo Welt"
Dabei wird der String ja direkt ausgegeben und noch schneller als man ihn schreiben oder lesen könnte. Gemeint ist hier das lesen des Strings während der Ausgabe selbst und nicht das lesen nach der Ausgabe. Wer noch mit MoDem's gearbeitet hat und weiß wie es bei einem 300 Baud Connect aussieht, wird verstehen was ich meine. Die Lektüre von
man echo
und von
info '(coreutils) echo invocation'
Haben mich leider nicht weiter gebracht, so das ich unter Zuhilfenahme weiterer Programme (tr, sed) tricksen musste. Das Ergebnis seht ihr hier:
#!/bin/bash
# Slow down the Output from the 'echo' Command
echo "H"|tr "\n" " "|sed 's/ //'
sleep 0.5|tr "\n" " "|sed 's/ //'
echo "a"|tr "\n" " "|sed 's/ //'
sleep 0.5|tr "\n" " "|sed 's/ //'
echo "l"|tr "\n" " "|sed 's/ //'
sleep 0.5|tr "\n" " "|sed 's/ //'
echo "l"|tr "\n" " "|sed 's/ //'
sleep 0.5|tr "\n" " "|sed 's/ //'
echo "o"|tr "\n" " "|sed 's/ //'
sleep 0.5|tr "\n" " "|sed 's/ //'
echo " "|tr "\n" " "|sed 's/ //'
sleep 0.5|tr "\n" " "|sed 's/ //'
echo "W"|tr "\n" " "|sed 's/ //'
sleep 0.5|tr "\n" " "|sed 's/ //'
echo "e"|tr "\n" " "|sed 's/ //'
sleep 0.5|tr "\n" " "|sed 's/ //'
echo "l"|tr "\n" " "|sed 's/ //'
sleep 0.5|tr "\n" " "|sed 's/ //'
echo "t"
Kennt also jemand von euch einen undokumentierten Parameter oder eine Option mit der man echo dazu überreden könnte langsam zu machen?
Linuxhase
2 Antworten
Interessante Aufgabenstellung in einer schnelllebigen Zeit. Da muss ich unweigerlich an den alten Apple IIe denken.
Leider kenne ich auch keine geheime Optionen von "echo" oder der Alternative "printf".
Habe aber in einem alten Thread des ubuntuforums folgenden Vorschlag für ein Bash-Script mit dem sinnigen Namen "slowecho" gefunden:
#!/bin/bash
#
# slowecho -- a bash script that echoes its argument one character
# per second.
#
arg=${@}
for (( i=0; i < ${#arg}; i+=1 )) ; do
echo -n "${arg:$i:1}"
sleep 1
done
echo
@bmke2012
slowecho
Das Script arbeitet wie es soll, habe die Wartezeit auf 0.5 gesetzt und was ausgegeben wird ist identisch mit dem was ich erreicht hatte. :-)
Mir gefällt nur nicht das ich den Text als Argument übergeben muss. Das Ganze soll Teil eines umfassenderen Scripts sein.
Interessante Aufgabenstellung in einer schnelllebigen Zeit.
Ja das ist wahr. Ich bin darauf gekommen als ich mir cool-retro-term angesehen habe.
Linuxhase
Mir gefällt nur nicht das ich den Text als Argument übergeben muss.
Verstehe ich jetzt nicht so ganz?! "echo" bekommt seinen auszugebenden Text doch auch als Argument?
An printf als Alternative hatte ich auch zuerst gedacht - aber Pustekuchen. Insofern kommt man wohl um ein Script nicht herum.
Ich habe etwas ähnliches unter der Bezeichnung "typewriter" gefunden :).
@Kerridis
So? ...://stackstackoverflow.com/questions/10458743/bash-reading-text-from-a-string-one-character-at-a-time-with-whitespace
Das sieht aus als wenn ich das in meinem Script verarbeiten kann, danke. War auch schwer mit den Suchbegriffen ans Ziel zu kommen.
Aber das hast du dir sicherlich schon gedacht ;).
Klar, aber die Variante die dort vorgestellt wurde gibt mir die Möglichkeit einen Text via <<EOF zu übergeben. Vor allem das ich mit typewriter "Text" .1 die Geschwindigkeit auch regeln kann.
Jetzt will ich nur noch sehen ob ich die Pausenzeit zwischen den Buchstaben per random variieren lassen kann.
Linuxhase
Natürlich dann mit "typewriter "$1" .1" im Script statt "typewriter "Typewriters are cool." .1"
Aber das hast du dir sicherlich schon gedacht ;).
Edit: Und ich hätte die Seite mal aktualisieren sollen, die Antwort von bmke2012 hatte ich gar nicht gesehen...
@bmke2012
Den hier:
http://ubuntuforums.org/archive/index.php/t-875283.html
Da habe ich nicht ausführlich genug gesucht bzw nicht die richtigen Suchbegriffe ("slow down echo" statt "slowecho") verwendet.
Linuxhase