Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

while read line; do irgendwas; done < file

1 view
Skip to first unread message

Fr@nk Stef@ni

unread,
Nov 9, 2009, 10:03:54 AM11/9/09
to
Hallo zusammen,

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
...

Hauke Laging

unread,
Nov 9, 2009, 10:58:20 AM11/9/09
to
Fr@nk Stef@ni schrieb am Montag 09 November 2009 16:03:

> 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

Hauke
--
http://www.hauke-laging.de/ideen/

Lothar Kimmeringer

unread,
Nov 9, 2009, 3:00:30 PM11/9/09
to
Fr@nk Stef@ni wrote:

> 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!

Hauke Laging

unread,
Nov 9, 2009, 5:01:59 PM11/9/09
to
Lothar Kimmeringer schrieb am Montag 09 November 2009 21:00:

> 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

Fr@nk Stef@ni

unread,
Nov 10, 2009, 8:42:40 AM11/10/09
to
Hauke Laging schrieb:

> Lothar Kimmeringer schrieb am Montag 09 November 2009 21:00:
>
>> 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

Hauke Laging

unread,
Nov 10, 2009, 11:27:15 AM11/10/09
to
Fr@nk Stef@ni wrote:

>> 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).

0 new messages