PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit while read und Leerzeichen



BenNavis
16-06-2005, 17:03
Hi,

ich bin grade dabei von einem PHP-Skript aus Systemkommandos aufzurufen und deren Output in HTML darzustellen.
Ich rufe z.B. "top -bn 1 > file" per cron auf. Bei Aufruf der index.php wird ein bash-Skript aufgerufen, dass "file" per

while read zeile
do
echo "$zeile <br>" | sed s#\ #\\\&nbsp\;#g >> top.html
done < file
einließt, Leerzeichen durch &nbsp; ersetzt und das Ergebnis in top.html schreibt.

Mein Problem ist, dass Leerzeichen am Beginn der Zeile nicht ersetzt werden, was dazu führt, dass in der Ausgabe die Spaltenelemente nicht übereinander stehen, sondern gegeneinander versetzt sind.

Kürzt read die Zeilen um führende Leerzeichen? Kann man das abstellen? Oder liegt es gar an was anderem?

Danke euch,
Ben

peschmae
16-06-2005, 17:25
Ich würde mal gucken ob Read die kürzt... :D

Antwort: Ja.
Lösung: Da magic IFS :D


IFS="
"
while read bla; do zeugs; done


MfG Peschmä

BenNavis
16-06-2005, 18:41
Super, das klappt! Danke! :)

Wenn Du mir jetzt noch erklären würdest, was ich da eigentlich gemacht hab, dann wäre ich richtig glücklich! ;)

peschmae
16-06-2005, 19:43
Ich weiss auch nicht genau wieso das jetzt das macht aber das war halt intuition :)

Ich meine IFS geht normalreweise schon die Bash was an - aber hier sollte doch die Bash gar nix machen - nur read einfach das Ding in die Variable stecken. Mysteriös... :D

Achso, read liest auch in mehrere Variablen und getrennt mit Tabs oder Spaces per default - scheint halt einfach auf auf IFS anzusprechen (auch wenn ich das explizit jetzt gerade nicht dokumentiert finde - aber das ist halt auch ein bash-builtin)

MfG Peschmä

klewan
16-06-2005, 22:33
the input field separator (IFS)

http://www.faqs.org/docs/bashman/bashref_33.html

BenNavis
17-06-2005, 13:19
Habs begriffen, danke euch beiden!