Piping und Returncodes

Ich bin dabei, ein kleines Script zu schreiben, das mir ein File von einem FTP-Server saugen soll. Von dem File weiß ich nur, dass es auf .tar endet, und ich weiß, dass es das einzige tar-Archiv dort ist (ftp://ftp.mcafee.com/pub/datfiles/english/).

Die Aufgabe ist nicht allzu schwer, aber ich dachte mir, dass es eleganter wäre, erst einmal zu prüfen, ob das File überhaupt heruntergeladen werden muss. Möglicherweise habe ich das ja schon, und dann könnte ich mir den Download sparen.

Zu diesem Behufe habe ich das Program ncftpls ausgewählt, dass mir folgendes Ergebnis bringt:

mehl:/tmp % ncftpls ftp://ftp.mcafee.com/pub/datfiles/english/
dat-4296.tar
dat-4296.zip
extra/
readme.txt
update.ini
virex/
mehl:/tmp %

Schön, und um den Namen des tar-Archives herauszufinden, hänge ich noch ein | grep tar an und fertig ist die Laube.

In meinem Script steht also schlichtweg der Ausdruck

FILENAME=`ncftpls ftp://ftp.mcafee.com/pub/datfiles/english/ | grep tar`

was so unnachahmlich perfekt dat-4296.tar in die Variable $FILENAME schreibt. Prima. Und weil ich wissen will, ob mit dem FTP-Transfer alles OK ging, will ich noch den Returncode abfragen mit

echo $?

Hmmm. Unprima.

Leider bekomme ich so nur den Return-Code von grep zurück. Erscheint logisch. Ich will aber wissen, ob nun der FTP-Transfer der Liste funktioniert hat oder nicht.

Hat jemand einen eleganten Tipp für mich (man wasauchimmer | grep suchbegriff) oder eine überhaupt viel bessere Lösung (jemanden anrufen, der etwas davon versteht) oder kann mich mit der Nase auf die richtige Stelle stoßen?

Stefan

In meinem Script steht also schlichtweg der
Ausdruck

FILENAME=ncftpls ftp://ftp.mcafee.com/pub/datfiles/english/ | grep tar

was so unnachahmlich perfekt dat-4296.tar in
die Variable $FILENAME schreibt. Prima. Und weil ich wissen
will, ob mit dem FTP-Transfer alles OK ging, will ich noch den
Returncode abfragen mit

echo $?

Hmmm. Unprima.

Leider bekomme ich so nur den Return-Code von grep zurück.
Erscheint logisch. Ich will aber wissen, ob nun der
FTP-Transfer der Liste funktioniert hat oder nicht.

Hat jemand einen eleganten Tipp für mich (man wasauchimmer |
grep suchbegriff) oder eine überhaupt viel bessere Lösung
(jemanden anrufen, der etwas davon versteht) oder kann mich
mit der Nase auf die richtige Stelle stoßen?

Einer meiner Profs hat kürzlich auf der shell geklammert, z.B. so:
(sleep 5; ls)&
Vielleicht geht das ja in Deinem Fall auch.

Ich selbst habe es aber noch nie ausprobiert.

Schönen Gruss,

Christof

In meinem Script steht also schlichtweg der
Ausdruck

FILENAME=ncftpls ftp://ftp.mcafee.com/pub/datfiles/english/ | grep tar

was so unnachahmlich perfekt dat-4296.tar in
die Variable $FILENAME schreibt. Prima. Und weil ich wissen
will, ob mit dem FTP-Transfer alles OK ging, will ich noch den
Returncode abfragen mit

echo $?

Hmmm. Unprima.

Leider bekomme ich so nur den Return-Code von grep zurück.
Erscheint logisch. Ich will aber wissen, ob nun der
FTP-Transfer der Liste funktioniert hat oder nicht.

Hi Stefan,

du könntest tatsächlich mit Klammerung arbeiten. Wenn du z.B. mit der ksh (oder bash) arbeitest, sollte so etwas wie

FILENAME=$( { ncftpls ftp://ftp.mcafee.com/pub/datfiles/english; ftpres=$?; } | grep tar )

funktionieren. Der FTP-Returncode steht anschließend in $ftpres (ok, ok: du wolltest den RC in $?, das wird aber so nicht klappen).

Gruss
bernhard

funktionieren. Der FTP-Returncode steht anschließend in
$ftpres (ok, ok: du wolltest den RC in $?, das wird aber so
nicht klappen).

Sehr geil, genau danach habe ich gesucht.

Danke,
Stefan