Archiv verlassen und diese Seite im Standarddesign anzeigen : Bash: Schon wieder die Leerzeichen
celindir
23-05-2007, 18:57
Hallo zusammen,
ich hatte ja gedacht, ich hätte es begriffen, mit den Leerzeichen in Pfad-oder Dateiangaben aber nun stehe ich doch wieder vor einem Problem:
for mp3 in "$inputdir"*.mp3;
do
echo testit
echo $(`echo mp3info -p "%t" $mp3`)
echo testit end
done
führt bei
inputdir=/home/celindir/testordner/mp 3/
und 01_000.00 000.30.mp3 im Verzeichnis zu
Error opening MP3: /home/celindir/testordner/mp: No such file or directory
Error opening MP3: 3/01_000.00: No such file or directory
Error opening MP3: 000.30.mp3: No such file or directory
Was kann ich machen, damit es auch mit Leerzeichen im eingeschlossenen Aufruf klappt?
Vielen Dank fürs Kopfzerbrechen
xstevex22
23-05-2007, 19:50
Hi,
IFS="
"
for mp3 in "$inputdir"*.mp3;
do
echo testit
echo $(`echo mp3info -p "%t" "$mp3"`)
echo testit end
done
celindir
23-05-2007, 20:08
Hi xstevex22,
Hab's versucht.
Nun erhalte ich folgende Fehlermeldung
mp3info -p %t /home/celindir/testordner/mp 3/01_000.00 000.30.mp3:
No such file or directory
Leider nicht der gewünschte Erfolg.
Weiß leider nicht woran es liegt.
so funktionierts bei mir:
for mp3 in "$inputdir"*.mp3; do mp3info -p "%t" "$mp3"; done
celindir
28-05-2007, 14:38
so funktionierts bei mir:
for mp3 in "$inputdir"*.mp3; do mp3info -p "%t" "$mp3"; done
Stimmt, so funktionierts, das war aber leider nicht das Problem.
Mein Problem ist, wie ich die Ausgabe wiederum in eine Variable schreiben kann.
Also
mp3titel=$(`echo mp3info -p "%t" "$mp3"`)
echo $mp3titel
und dabei hakt es leider immer noch:confused:
Also die Ausgabe _alles_ in eine Variable? Das hat meiner Meinung nach keinen Sinn.
Du kannst aber die Ausgabe in eine Datei schreiben und diese dann ausgeben, weiterbearbeiten...
Wenn du natuerlich immer nur den aktuellen Titel angezeigt bekommen willst, ist das was
anderes, das geht fuer mich aber bisher nicht klar aus deinen Aussagen hervor.
Naja du schaffst das schon ;)
Gruss 403
...
Mein Problem ist, wie ich die Ausgabe wiederum in eine Variable schreiben kann.
Also
mp3titel=$(`echo mp3info -p "%t" "$mp3"`)
echo $mp3titel
und dabei hakt es leider immer noch:confused:
Zuerst mal meine persönliche Meinung: Vergiss den for, wenn Du solche Schleifen baust. Nimm read, damit ersparst Du Dir auch, immer auf IFS, OFS & Co. aufpassen zu müssen.
ls "$inputdir"/*.mp3 | while read mp3; do
do_something
done
Die for-Schleife ist nur in ganz wenigen Fällen nötig, z. B. wenn Du innerhalb der Schleife noch per read auf stdin zugreifen willst oder wenn Du in der Schleife eine Variable belegst, die danach sichtbar sein soll (alles nach der Pipe läuft in einer Subshell ab).
Zu Deiner Variablenzuweisung: Das ist doppelt (ähm - sogar 3x;-) gemoppelt.
# bash-spezifisch
mp3titel=$(mp3info -p "%t" "$mp3")
# für sh/ksh/bash gueltig
mp3titel="`mp3info -p \"%t\" \"$mp3\"`"
# auch im echo immer quoten, sonst wird z. B. aus 2 Blanks einer
echo "$mp3titel"
Zur Erklärung:
in der bash hat die Konstruktion $(Befehl) die gleiche Funktion wie allgemein `Befehl` - damit wird die Standardausgabe von Befehl zurückgegeben. Der echo gibt einfach nur die nachfolgenden Zeichen auf stdout aus - würde Dir also das mp3info-Kommando als solches zurückgeben.
Jan
celindir
29-05-2007, 08:17
@jan61
Wow, da lag ich wohl ziemlich daneben.
Das kommt davon, wenn man bash-Programmierung hauptsächlich mit Try and Error macht, dann kommen oft Sachen raus, die zwar funktionieren, aber keiner weiß warum.
Wenn das klappt, dann hab ich echt mal etwas Sinnvolles dazu gelernt.
Werde es heute Abend gleich ausprobieren.
Auf jeden Fall schon mal vielen Dank für die Erläuterung und den Tipp mit der while-Schleife.
Gruß
Nachtrag: Hat super geklappt! Herzlichen Dank, auch für die gute Erläuterung!
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.