es ist sicher ein Trivialfall und ich sehe den Wald
vor lauter B�umen nicht. Mein Bash-Aufruf:
while read line; do echo rm2wav $line; done < URLs
^ ^^^^
^ siehe [1]
^
gibt (wg. Test mit "echo") Zeilen der Form
rm2wav pnm://www.museeq.net/rm_b/CAP218-2A-1.rm
rm2wav pnm://www.museeq.net/rm_b/COL77086-3.rm
...
aus. Nehme ich eine solche Zeile als Kommando, direkt am
Shell-Prompt, tut das Skript "rm2wav", was es soll und
speichert den Audio-Stream als WAV-Datei.
Verwende ich dagegen die ganz oben gezeigte Form mit (while ... done),
funktioniert die Konvertierung nicht.
Bitte �ffnet mir die Augen - ich will's begreifen!
Viele Gr��e aus den Alpen,
Frank
[1] Die Datei URLs
------------------
pnm://www.museeq.net/rm_b/CAP218-2A-1.rm
pnm://www.museeq.net/rm_b/COL77086-3.rm
...
> while read line; do echo rm2wav $line; done < URLs
> aus. Nehme ich eine solche Zeile als Kommando, direkt am
> Shell-Prompt, tut das Skript "rm2wav", was es soll und
> speichert den Audio-Stream als WAV-Datei.
>
> Verwende ich dagegen die ganz oben gezeigte Form mit (while ...
> done), funktioniert die Konvertierung nicht.
Fehlermeldungen sind manchmal gar nicht so nutzlos. Man könnte das
einfach mal nach set -x starten.
In diesem Fall scheint es egal zu sein, aber im allgemeinen sollte
man immer "$line" schreiben, wenn man nicht Spezielles vorhat (eval)
und ganz genau weiß, was man tut.
Was für ein Script ist denn rm2wav? Wenn es ein Shellscript ist,
einfach mal bash -vx rm2wav ... nehmen und dann die Ausgabe beider
Varianten vergleichen.
CU
> Hallo zusammen,
>
> es ist sicher ein Trivialfall und ich sehe den Wald
> vor lauter B�umen nicht.
Es ist zwar trivial, aber nicht so direkt sichtbar.
> Mein Bash-Aufruf:
>
> while read line; do echo rm2wav $line; done < URLs
> ^ ^^^^
> ^ siehe [1]
> ^
[...]
> Verwende ich dagegen die ganz oben gezeigte Form mit (while ... done),
> funktioniert die Konvertierung nicht.
>
> Bitte �ffnet mir die Augen - ich will's begreifen!
rm2wav wird auch von STDIN lesen, daher greift es dir wohl
die URLs weg, so dass die while-Schleife nach dem ersten
Durchlauf zu ende ist.
Hier der Richtige[TM] Weg:
while read -u 3 i; do
rm2wav "$i"
done 3< URLs
Gruesse, Lothar
--
Lothar Kimmeringer E-Mail: spam...@kimmeringer.de
PGP-encrypted mails preferred (Key-ID: 0x8BC3CD81)
Always remember: The answer is forty-two, there can only be wrong
questions!
> while read -u 3 i; do
> rm2wav "$i"
> done 3< URLs
Oder, dichter am Original:
while read line; do echo rm2wav $line </dev/null; done < URLs
Sieht ja fast[TM] aus wie mein Original. Was bewirkt denn
das "</dev/null" genau? Ich nutze das meistens nur zur
Entsorgung unerw�nschter Ausgaben, also ">/dev/null".
Frank
>> while read line; do echo rm2wav $line </dev/null; done < URLs
>
> Sieht ja fast[TM] aus wie mein Original. Was bewirkt denn
> das "</dev/null" genau?
Das Analoge...
> Ich nutze das meistens nur zur
> Entsorgung unerwünschter Ausgaben, also ">/dev/null".
...hierzu.
Nur dass es nicht um die Ausgabe (fd 1), sondern um die Eingabe (fd 0) geht.
Was Du schon kennst, bewirkt, dass statt aufs Terminal auf /dev/null
geschrieben wird. Meine Variante bewirkt, dass statt vom Terminal von
/dev/null gelesen wird. Und das ist eine leere Eingabe, siehe:
cat /dev/null # äquivalent zu cat </dev/null
Mal in man bash nach ^redirection suchen (bei mir kommt man da durch Eingabe
von 33p hin).