bash Script: Leerzeichen- und Variablen-Auswertungsproblem?

Hallo!

( tl;dr ? überflieg das Fettgedruckte und das CodeBeispiel =) )

Das Problem ist etwas komplexer, ich konnte es aber auf das folgende, einfache Problem begrenzen:

  • Prüfe ob das Verzeichnis /backups/01 today/ existiert.
  • falls Ja: Wechsle in das Verzeichnis und dann führe den Befehl macheX aus
  • ansonsten: gib eine Fehlermeldung aus

Kern des Problems: Das Verzeichnis enthält enthält ein Leerzeichen und der Pfad muss vor dem Prozess in der Variablen DIRR gepeichert werden. (Der Pfad kann nicht umbenannt werden, das wäre zu einfach)

Ich habe in etwa folgendes:

#!/bin/bash

DIRR="/backups/01 today"

if [ -d $DIRR ];
then
  cd $DIRR
  macheX
else
   echo "FEHLER: $DIRR existiert nicht!"
fi

Wie man sieht wird die Variable DIRR anfangs gesetzt und wird anschließend auf drei unterschiedliche arten ausgewertet. Ich habe im Code-Beispiel bewusst auf ` ' und " Einfassungen von DIRR verzichtet, denn genau das ist das Problem! Wie müssen diese DIRR eingefasst werden und wie der Pfad angegeben werden, damit es funktioniert?

Ich habe etliche Kombinationen durch und werde langsam verrückt. =) Wenn ich den Pfad z.B. mit oder ohne escape-Zeichen vor dem Leerzeichen angebe, dann klappt das eine aber es hakt dann wieder wo anders. In der Fehlermeldung darf das Verzeichnis beliebig erscheinen (mit ` ' " oder auch dem escape-Zeichen \ )

Wer schafft es mein Brett vorm Kopf zu zersägen? =)

Linux, Bash, Script, Shell
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

Linux, Bash, openSUSE, Shell, Echo

Meistgelesene Fragen zum Thema Bash