Re: script Frage

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Sun, 19 Apr 2009 00:15:21 +0200 (CEST)

Polytropon <freebsd(at)edvax.de> wrote:
> Manfred Lotz wrote:
> > Ich kann in einem Script schreiben:
> >
> > cmd1 &&
> > cmd2 &&
> > cmd3
> >
> > ohne \ als continuation character zu benutzen.
> >
> > Es funktioniert. Frage: Sollte ich sowas dennoch vermeiden und lieber \
> > benutzen?

Das ist POSIX-Standard. Du kannst es bedenkenlos verwenden.
Folgendes ist aus der Shell-Grammatik von POSIX 1003.1-2001
bzw. SUSv3:

   and_or : pipeline
            | and_or AND_IF linebreak pipeline
            | and_or OR_IF linebreak pipeline

Wobei <linebreak> eine Folge von beliebig vielen (auch
null) Newlines ist.

Das gleiche funktioniert übrigens auch bei Pipelines.
Ich schreibe öfters Pipelines mit Newlines ohne '\':

   grep foo irgendwo |
   cut ... |
   sed ... |
   awk ...

Man könnte sich natürlich immer darüber streiten, ob das
stilistisch »schön« ist, aber das ist reine Geschmacks-
frage. Funktionieren tut es jedenfalls.

> Da wäre meine Gegenfrage: In *welcher* Shell funktioniert das?

In allen, die POSIX-konform sind. Es funktioniert auch in
der /bin/sh von Solaris, und _das_ will etwas heißen. ;-)
(Nur um nicht missverstanden zu werden: Letztere ist nicht
POSIX-konform.)

> So man für mehrere Systeme scripten will, wo man die Eigenheiten
> der Shells nicht genau kennt, sollte man sich nicht auf das
> verlassen, was zu Hause in der eigenen Lieblings-Shell ohne
> Probleme funktioniert. :-)

Im Zweifelsfall ist es hilfreich, einfach mal zu gucken,
was der Standard dazu sagt. Dafür ist der ja da.

> Davon abgesehen, es liest sich auch irgendwie komisch. Man
> vermutet eher eine Folge von Hintergrundprogrammen, z. B.

Also, ich würde das nicht vermuten. Man muss halt schon
hingucken, ob da "&" oder "&&" steht. Bei "|" und "||"
musst Du ja auch genau hingucken.

> cmd1 &
> cmd2 &
> cmd3 &

Die kannst Du auch ohne Newlines schreiben:

   cmd1 & cmd2 & cmd3 &

Das "&" terminiert ein Kommando ebenso wie ein Semikolon,
mit dem Unterschied, dass es asynchron ausgeführt wird.

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M.
Handelsregister: Registergericht Muenchen, HRA 74606,  Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün-
chen, HRB 125758,  Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart
FreeBSD-Dienstleistungen, -Produkte und mehr:  http://www.secnetix.de/bsd
'Instead of asking why a piece of software is using "1970s technology,"
start asking why software is ignoring 30 years of accumulated wisdom.'
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Sun 19 Apr 2009 - 00:15:49 CEST

search this site