Hallo, On Sat, 24 May 2003, Harry Rüter wrote:
ich möchte in einem Shellscript eine Datei zeilenweise einlesen.
Also ungefähr so :
---schnipp--- cat DATEI | \ while read line do .... done ---schnipp---
Leider werden führende Leerzeichen von read einfach überlesen, das ist in diesem Fall aber nicht zulässig.
echo -e 'a b\n c' | { IFS=" "; while read line; do echo "line='$line'"; done; } line='a b' line=' c' Der Trick dabei ist, dass du als "Input Field Separator" (IFS) nur noch den Zeilenumbruch erlaubst. D.h. hinter dem IFS=" steht nur(!) ein Zeileumbruch und dann das schliessende ". Alternativ kannst du auch IFS="`echo -e '\n'`"; verwenden.
Ich habe also nachdem ich eine Weile vergeblich nach einem Ersatz für read gesucht habe einfach probiert, mit einem kleinem C-Programm mein eigenes read (sscanf) zu basteln. [..] return(setenv(argv[1],tmp,1)); } ---schnipp---
So und jetzt die Frage an die Liste, wie kriege ich die führenden Leerzeichen in die Variable line ?
Mit setenv garnicht. Denn ein Programm kann nur seine eigene Umgebung und die von Kindprozessen aendern/beeinflussen, nicht aber die des Elternprozesses wie der der shell aus der es aufgerufen wurde. Ich hoffe die Loesung oben mit 'while read' klappt. -dnh --
Die Probleme dieser Welt begannen, als der erst kam! Der erste was? M-e-n-s-c-h [in detebe]