Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

03.02.2010, 13:42

script ausgabe in datei leiten

Hallo,

ich habe mal wieder einen Knoten im Kopf:

Zwei Skripte, welche über ein drittes aufgerufen werden, also
skript3.sh sieht so aus:

Quellcode

1
2
3
#!/bin/bash
. 'skript1.sh'
. 'skript2.sh'

skript3 rufe ich im cron auf mit:

Quellcode

1
sh skript3.sh > log.txt

Funktioniert auch alles, aber log.txt ist aber leer, obwohl skript1 definitiv eine Ausgabe erzeugt
Wo ist mein (Denk)Fehler?

Danke und Gruss,
Tom

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tom0815« (08.02.2010, 20:01)


2

03.02.2010, 15:18

wieso schreibst du nicht schon im skript 3, die ausgabe von skript 1 und 2 in eine datei ?
Intel core 2 duo E6600
XFX Geforce 7950 gt
4096 MB DDR2
Intel DP35DP

3

03.02.2010, 18:08

jo, das geht, danke

Aber rein aus Interesse, warum klappt das obere nich?

Gruss,
Tom

4

04.02.2010, 20:48

. ist ja nur "source".
Du willst wohl eher

Quellcode

1
2
3
#!/bin/sh
./skript1.sh
./skript2.sh
"Erst nachdem wir alles verloren haben, haben wir die Freiheit, alles zu tun."
"It's only after we've lost everything, that we're free to do anything!"

Jabber: Die ID kann via PN erfragt werden.

5

05.02.2010, 13:34

@maggu: ich weiß, was du meinst, glaub ich und genau da liegt ja der Hase im Pfeffer:

in skript3 werden Variablen gesetzt, welche von skript1 und skript2 benutzt werden.

6

06.02.2010, 15:19

Wenn die Variablen in skript3 gesetzt werden und in skript1 und skript2 nur benutzt werden sollen, dann sollte das mit einem vorherigen
export VARIABLE
funktionieren.

test_frame.sh

Quellcode

1
2
3
4
5
6
#!/bin/sh

TESTVAR="test"
export TESTVAR

./test_int.sh


test_int.sh

Quellcode

1
2
3
#!/bin/sh

echo ${TESTVAR}
"Erst nachdem wir alles verloren haben, haben wir die Freiheit, alles zu tun."
"It's only after we've lost everything, that we're free to do anything!"

Jabber: Die ID kann via PN erfragt werden.

7

08.02.2010, 20:00

hmm, ich glaube, hier hab ich wohl noch erheblich Wissenslücken.

Laut http://www.tldp.org/LDP/abs/html/abs-guide.html#SOURCEREF wäre schon "source" bzw. "." das was ich möchte.
Worin besteht denn jetzt der Unterschied zw. den Variablen in nem "gesourcten" Skript und den exportierten Varis?

Mein eigentliches Problem hat sich erledigt, weil meine "Subskripte" keine Ausgaben sondern höchsten Fehler erzeugen und ich ja eigentlich auch nur die Fehler mitloggen will, also mit "2>log" am Aufruf hintendran klappt es.

Danke euch beiden

8

09.02.2010, 10:06

Worin besteht denn jetzt der Unterschied zw. den Variablen in nem "gesourcten" Skript und den exportierten Varis?


Source "." liest die Datei und führt diese im gleichen Prozess (bash) aus. Sonst wird eine neue Bash gestartet. Dabei kann der neue Prozess die Variable kennen oder nicht.

Beispiel: "Unterprogramm" foo

Quellcode

1
2
3
4
$ cat foo
#!/bin/sh

echo "Test: ${TEST}"
Wenn du das innerhalb einer bash aufrufst wird *immer* ein neuer Prozess gestartet(!).

Es wird die Variable TEST auf der console ausgegeben.

1. Definieren der Variable und "Aufruf" von foo. Wenn die Variable nicht exportiert wird, kennt der neue Kind-Prozess (die neue Shell) die Variable nicht. Folglich bleibt die console leer

Quellcode

1
2
3
4
5
6
7
$ cat ./bar_1
#!/bin/sh

TEST="Das ist ein Test"
./foo
$ ./bar_1
Test:



2. Mit export. Jetzt wird auch eine neue Shell gestartet, aber diesmal wird dem neuen Prozess die Variable als Umgebungsvariable hinzugefügt.

Quellcode

1
2
3
4
5
6
7
$ cat bar_2
#!/bin/sh

export TEST="Das ist ein Test"
./foo
$ ./bar_2
Test: Das ist ein Test


3. Mit Source oder einfach nur "." . Hier wird *kein neuer Prozess* gestartet, sondern die angegebene Datei eingelesen und im gleichen Prozess ausgeführt.

Quellcode

1
2
3
4
5
6
7
$ cat bar_3
#!/bin/sh

TEST="Das ist ein Test"
. ./foo
dyle@demandred ~ $ ./bar_3
Test: Das ist ein Test


Warum du all diese Möglichkeiten hast, hat viele verschiedene Gründe. Es läßt sich aber keine Faustregel angeben, was besser wäre.

Zu beobachten ist, das meist ein Satz von Variablendefinitionen in solchen Dateien drin sind und diese dann für div. Aufgaben reingesourced werden.
http://www.dyle.org
IM-Account (Jabber!) sind auf meiner HP ...
There is no place like /home

http://www.gentooforum.de
http://www.gentoofreunde.org

<div>how to annoy a web developer?</span>