-
tcsh foreach zeilenweise
Hallo Leute,
ich habe ein tcsh-script mit folgender foreach-Schleife:
Code:
foreach zeile (`cat file.txt`)
.....
end
Es funktioniert nicht so, wie ich will.
Die Variable zeile wird mit allen Worten der Datei file.txt belegt.
Ich möchte jedoch, dass zeile mit jeder Zeile der Datei file.txt
belegt wird, d.h. der Block innerhalb der Schleife soll für jede Zeile
aus file.txt ausgeführt werden. Wie erreiche ich das am einfachsten
in tcsh?
Daniel
-
Unter tcsh ist es nicht so einfach den IFS (BASH) zu ändern!
Es gibt verschiedene eigen Kreationen im Netz die dir Helfen können oder selbst bauen.
Code:
#!/usr/bin/tcsh -f
foreach zeile (`cat test.txt | sed 's, ,\\t,g'`)
echo $zeile
end
Für die Kompatibilität siehe: http://interglacial.com/~sburke/pub/...ivalencies.txt
Mit bash kann man so etwas wesentlich besser machen.
Beispiel:
Code:
#!/usr/bin/env bash
#################################
## Generiert eine neue /etc/ftpusers
## echo "$IFS" | od -c
## echo "$IFS" | od -b
#################################
cat > /tmp/ftpusers <<EOF
#
# ftpusers This file describes the names of the users that may
# _*NOT*_ log into the system via the FTP server.
# This usually includes "root", "uucp", "news" and the
# like, because those users have too much power to be
# allowed to do "just" FTP...
#
EOF
IFS=":"
while { read user d d gid d; }; do
if [ $gid -le 999 -a "$user" != "ftp" ]; then
echo "$user"
fi
done </etc/passwd >>/tmp/ftpusers
cat >> /tmp/ftpusers <<EOF
##EOF
EOF