Dateinamen mit Leerzeichen in Shripten
Hallo Liste!
Preisfrage: was stimmt nicht am folgenden Konstrukt?
#!/bin/bash
find /bin | while read FILE; do
echo "Datei ${FILE} existiert."
read -p "Löschen? (y/n)" -n 1 REPLY
if [ ${REPLY} = "y" ]; then rm -f ${FILE}; fi
done
Das Skript ist zwar sinnlos, aber es soll nur mein Problem verdeutlichen:
Das read innerhalb der Schleife "funktioniert nicht". Hat jemand eine
Erklärung? Dieses kleine aber überaus nervige Problem taucht übrigens auch
in der folgenden Minimalkonfiguration auf:
find /bin | while read FILE; do read REPLY; done
Auch hier wird REPLY nie von read abgefragt!
Das Konstrukt
for FILE in `find /bin`; do read REPLY; done
würde zwar prinzipiell gehen, ich brauche aber die Variante mit while,
weil nur diese imstande ist Dateinamen mit Leerzeichen im Namen korrekt zu
verarbeiten. Das for zerlegt jeden Dateinamem mit Leerzeichen in mehrere
Tokens, das while trennt immer nur an Zeilenumbrüchen.
Danke für eure Anregungen!
--
Grüße
Adalbert Dawid
Reply to: