[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: bash: for-Schleife abbrechen



On Fri, 30 Apr 2004 21:05:09 +0200
Bertram Scharpf <b.scharpf@tesionmail.de> wrote:

> eine for-Schleife möchte ich abbrechen, wenn darin ein Fehler
> auftritt. Der Rückgabewert soll dann der des gescheiterten
> Kommandos sein. Also in etwa so:
> 
>   $ for f in file1 file2 file3 ; do test -f $f || my_break ;
>   > ls -l $r ; done && echo 'All files exist.'
> 
> Derzeit behelfe ich mir mit einem `exit 1'. Das
> funktioniert, weil ich aus einem Makefile heraus aufrufe.

Das ist dann aber nur zufällig der Rückgabewert des gescheiterten
Kommandos.


> Ich kann mir auch behelfen mit:
> 
>   $ r=0 ; for i in a b c ; do test -f $i ; r=$? ; test $r -eq 0 || break
>   ;> ls -l $r ; done ; test $r -ne 0 || echo 'All files exist.'

Du willst wenn a, b und c existieren drei mal "ls -l 0" ausführen?


> Gibt es elegantere Lösungen?

Um zu testen, ob die Dateien alle existieren:

  ls  gibt es all diese 'dateien?' &>/dev/null && echo ja|| echo nö

Um das Exitvalue von "test -f" oder was auch immer im Fehlerfall zu
erhalten sollte mit der bash folgendes funktionieren:

  ( for i in  gibs gar nich;  do   
       test -f $i||exit $?;      
       echo "datei $i existiert; 
  done ); echo exitval: $?

Zumindest stirbt die shell nicht, von der aus es aufgerufen wurde (im
Gegensatz zu der Variante ohne Klammern). Ob davon etwas eleganter ist als
deine Lösungen musst du selbst beurteilen.


Gruß,

Christian



Reply to: