David Haller wrote at Tuesday, October 04, 2005 10:04 AM
AFAIK Darf hier KEIN Leerzeichen zwischen dem Ampersand (Dateideskriptor) und den "Größer" Zeichen stehen, vielleicht ein Grund, dass Du im Log nicht das siehst, was Du sehen willst.
Ja, das aendert die Bedeutung:
dh@slarty[3]: ~ (0)$ f() { echo 'stdout'; echo 'stderr' >&2; } dh@slarty[3]: ~ (0)$ f & >>/dev/null [1] 3279 dh@slarty[3]: ~ (0)$ stdout stderr
[1]+ Done f dh@slarty[3]: ~ (0)$ $ f &>>/dev/null bash: syntax error near unexpected token `&>>/' dh@slarty[3]: ~ (258)$ f >>/dev/null 2>&1 dh@slarty[3]: ~ (0)$
So hab ich das auch gesehen ...
Doch, ist ok. "background" und "anhaengen" sind die beiden Features, die diesem Aufruf mitgegeben werden.
Was meinst Du hier mit "background"?
Dass das script im Hintergrund laeuft, vgl.
programm &
Korrekt mit Ausgabeumleitung(en) geht's so:
dh@slarty[3]: ~ (0)$ f >>/dev/null 2>&1 & [1] 3280 [1]+ Done f >>/dev/null 2>&1 dh@slarty[3]: ~ (0)$
D.h. das '&' um das Programm in den Hintergrund zu schicken kommt als letztes.
OK, mit background in diesem Kontext hab ich das "&" in dem Fall gar nicht gesehen, eben weil es ganz wo anders stand ...
Es ist empfehlenswert noch "2>&1" anzuhaengen, damit auch die Fehlermeldungen in log.txt auftauchen.
Sollte das nicht schon durch "2>> log.txt" bewirkt werden?
Geht auch.
f >>log.txt 2>>log.txt &
ist aequivalent zu
f >>log.txt 2>>1 &
Die Variante im script mit
exec 1>>log.txt exec 2>>log.txt
ist aber IMHO auch gut geeignet (siehe man bash | less '+/^redirection').
Das war jetzt dann doch die perfekte Zusammenfassung, in dem Fall war ich ja dann mal wirklich auf dem _richtigen_ Dampfer ;-) Grüße, Markus