staging.inyokaproject.org

Alle Ausgaben im Logdatei umleiten

Status: Ungelöst | Ubuntu-Version: Ubuntu 14.04 (Trusty Tahr)
Antworten |

alabiana

Anmeldungsdatum:
27. Februar 2015

Beiträge: Zähle...

Hallo,

ich suche eine Möglichkeit in meinem Skript etwas einzutragen, wodurch alle Ausgaben in eine Logdatei umgeleitet werden, ohne dass man das beim Aufrufen des Skripts angeben muss. Ist das möglich?

Mfg

alabiana

wxpte

Avatar von wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: Zähle...

Willkommen bei ubuntuusers. ☺

Du formulierst innerhalb des Skripts nach dem folgenden Muster:

1
Shell-Befehl >> Logdatei.log

Dann wird die Ausgabe jedes nach diesem Muster formulierten Befehls untereinander in die Logdatei geschrieben.

Du kannst für die Befehle allerdings auch als

1
Shell-Befehl | tee -a Logdatei.log

formulieren, dann siehst du die Ausgabe zusätzlich auf dem Bildschirm.

In unserem Wiki findest du eine Menge Anregungen.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 12527

Herzlich willkommen hier im Forum!

alabiana schrieb:

ich suche eine Möglichkeit in meinem Skript etwas einzutragen, wodurch alle Ausgaben in eine Logdatei umgeleitet werden, ohne dass man das beim Aufrufen des Skripts angeben muss. Ist das möglich?

Ja.

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

exec > logdatei 2>&1
# falls man immer anhängen will:
# exec >> logdatei 2>&1

weitere Befehle

Das leitet alle Ausgaben der Shell sowie der ausgeführten Programme in die Datei um. (Es gibt Sonderfälle, die immer auf die Konsole schreiben, aber die betrachten wir mal bei einer anderen Gelegenheit.)

WinXP to Edgy schrieb:

Du formulierst innerhalb des Skripts nach dem folgenden Muster:

1
Shell-Befehl >> Logdatei.log

Dann wird die Ausgabe jedes nach diesem Muster formulierten Befehls untereinander in die Logdatei geschrieben.

Du kannst für die Befehle allerdings auch als

1
Shell-Befehl | tee -a Logdatei.log

formulieren, dann siehst du die Ausgabe zusätzlich auf dem Bildschirm.

Ich hatte die Frage so verstanden, dass ausnahmslos alle Ausgaben umgeleitet werden sollen. Dann ist der Ansatz, das bei allen Befehlen einzeln anzugeben etwas umständlich.

In unserem Wiki findest du eine Menge Anregungen.

👍

wxpte

Avatar von wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1004

rklm schrieb:

Dann ist der Ansatz, das bei allen Befehlen einzeln anzugeben etwas umständlich.

Absolut richtig; und ich habe gerade wieder etwas dazu gelernt. Nach so einer Abkürzung habe ich nämlich auch schon gesucht. Hab's auch gleich in den von mir verlinkten Wiki-Artikel mit eingepflegt. ☺

Mooi

Anmeldungsdatum:
15. August 2014

Beiträge: Zähle...

rklm schrieb:

1
exec > logdatei 2>&1

Sehr fein finde ich die Möglichkeit, alle Ausgaben durch eine Subshell zu leiten, in der z.B. tee laufen kann:

1
exec > >(tee logdatei) 2>&1

wxpte

Avatar von wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1004

@Mooi: Das könnte man dann sicher hier auch noch mit aufnehmen.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 12527

Mooi schrieb:

Sehr fein finde ich die Möglichkeit, alle Ausgaben durch eine Subshell zu leiten, in der z.B. tee laufen kann:

1
exec > >(tee logdatei) 2>&1

Das ist allerdings spezifisch für die bash, zsh und vielleicht noch andere Shells - die sh kann das nicht.

u1000

Anmeldungsdatum:
2. Oktober 2011

Beiträge: Zähle...

rklm schrieb:

die sh kann das nicht.

Aber so:

#!/bin/sh

sub() {
  Befehl1
  Befehl2
  Befehl3
  ..
}
sub >> logfile

Viele Grüße u1000

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 12527

u1000 schrieb:

rklm schrieb:

die sh kann das nicht.

Aber so:

#!/bin/sh

sub() {
  Befehl1
  Befehl2
  Befehl3
  ..
}
sub >> logfile

Nein, denn das ist etwas anderes. Es ging ja um die Form >(kommando ...), mit anderen Worten "Process Substitution".

Außerdem braucht man für das, was Du dort machst, keine Shell-Funktion, sondern kann das einfach mit einer Gruppierung erledigen:

1
2
3
4
5
6
{
  Befehl1
  Befehl2
  Befehl3
  ...
} >> logfile

Ciao

robert

Antworten |