bash-skript ausgabe

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
nonsenz
Beiträge: 232
Registriert: 26.10.2002 20:16:49
Wohnort: berlin

bash-skript ausgabe

Beitrag von nonsenz » 26.12.2004 06:36:40

juten morgen...

...mal ne kurze frage:

ist es möglich innerhalb eines bashSkriptes auf
die ausgabe des selbigen zuzugreifen? konkret möchte ich alle ausgaben innerhalb meines backupskriptes in eine bestimmte datei schreiben. der ort haengt allerdings von übergabeparametern des skripts ab. ich könnte zwar ein zweites mini skript drumwickeln, allerdings finde ich das doof.
irgend welche ideen?

danke und gute nacht!

sascha

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: bash-skript ausgabe

Beitrag von roli » 26.12.2004 15:45:59

Hi Sascha,
nonsenz hat geschrieben:konkret möchte ich alle ausgaben innerhalb meines backupskriptes in eine bestimmte datei schreiben. der ort haengt allerdings von übergabeparametern des skripts ab.
sorry vielleicht liegt's am mir, aber ich finde deine Beschreibung nicht wirklich konkret. Wenn der Ort, an dem deine Ausgabedatei liegen soll von einem Eingabeparameter abhaengt, koenntest du das mit einem simplen if statement abfangen:

Code: Alles auswählen

if [ "Uebergabeparameter" -eq 1 ]
then
  outputfile=/path1/file1
else
  outputfile=/path2/file2
fi
echo "Nutze Ausgabedatei $outputfile"
echo "Beginne mit dem Script" >>$outputfile
Wenn ich das ganze falsch verstanden habe, sieh die mal den Befehl "tee" an, damit kannst du einen Ausgabestrom aufteilen. Vielleicht koenntest du das dann verwenden.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

jengelh
Beiträge: 7
Registriert: 20.12.2004 19:18:49
Wohnort: Göttingen
Kontaktdaten:

Re: bash-skript ausgabe

Beitrag von jengelh » 26.12.2004 19:41:59

roli hat geschrieben:Hi Sascha,
nonsenz hat geschrieben:konkret möchte ich alle ausgaben innerhalb meines backupskriptes in eine bestimmte datei schreiben. der ort haengt allerdings von übergabeparametern des skripts ab.
sorry vielleicht liegt's am mir, aber ich finde deine Beschreibung nicht wirklich konkret. Wenn der Ort, an dem deine Ausgabedatei liegen soll von einem Eingabeparameter abhaengt, koenntest du das mit einem simplen if statement abfangen:

Code: Alles auswählen

if [ "Uebergabeparameter" -eq 1 ]
then
  outputfile=/path1/file1
else
  outputfile=/path2/file2
fi
echo "Nutze Ausgabedatei $outputfile"
echo "Beginne mit dem Script" >>$outputfile
Wenn ich das ganze falsch verstanden habe, sieh die mal den Befehl "tee" an, damit kannst du einen Ausgabestrom aufteilen. Vielleicht koenntest du das dann verwenden.
Also bei 1000 echo-Befehlen wird das bald schrecklich, wenn man hinterj eden >>$outputfile setzen muss, daher empfehle ich:

Code: Alles auswählen

if [ "$1" -eq 1 ]; then
    exec 1>datei;
else
    exec 1>bla;
fi;
echo Hallo Welt...
Betrifft natürlich auch die Ausgaben der Subprozesse(!)

Benutzeravatar
nonsenz
Beiträge: 232
Registriert: 26.10.2002 20:16:49
Wohnort: berlin

Beitrag von nonsenz » 27.12.2004 22:12:39

jau danke...

geanu. 100 mal ">>" is echt n bissl nervig. kanns gerade nich testen, aber danke!

tschoe
sasche

Benutzeravatar
nonsenz
Beiträge: 232
Registriert: 26.10.2002 20:16:49
Wohnort: berlin

Beitrag von nonsenz » 28.12.2004 00:14:35

so. es klappt gut. dazu hab ich aber dann noch ne frage:
sollte ich das file am ende schliessen mit oder ist das egal?
und kann ich die tar ausgabe

Code: Alles auswählen

tar: Removing leading `/' from member names
irgendwie verhindern? also is das ne warnung oder sogar ein fehler, dessen auswirkungen egal sind? also unterdruecken will ich die ausgabe nicht, frab mich nur ob das auch anders geht.

danke nochmal und gute nacht!

sascha

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 28.12.2004 02:01:53

Du kannst die Ausgabe von tar selbst nach /dev/null lenken, evtl. Fehlermeldungen werden eh an stderr geschrieben.

stdin brauchst du nicht zu schließen, das passiert automatisch, wenn das Skript beendet wird.

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 28.12.2004 07:41:31

Hallo nonsenz,
nonsenz hat geschrieben:kann ich die tar ausgabe

Code: Alles auswählen

tar: Removing leading `/' from member names
irgendwie verhindern?
Mit "-C" kannst Du die "tar: Removing ..."-Ausgabe verhindern.
Beispiel:

Code: Alles auswählen

tar -cf /tmp/sicherung-etc.tar -C / etc 
Gruß fuzzy

jengelh
Beiträge: 7
Registriert: 20.12.2004 19:18:49
Wohnort: Göttingen
Kontaktdaten:

Beitrag von jengelh » 28.12.2004 10:15:40

Nee, -C / is fuer "wechsle ins Verzeichnis /", Fehler ausblenden tut man
besser mit "2>/dev/null"

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 28.12.2004 12:18:51

Hallo jengelh,
Auch wenn das von dem Ursprungsthema wegführt:
Mir ging es darum, dass Du bei einem Backup mit "tar" und "cron" die Ausgaben mit der tar-Option "-C" reduzieren kannst.

Code: Alles auswählen

root@knoppix # tar -cf /tmp/sicherung-etc.tar /etc 
root@knoppix # tar: Removing leading `/' from member names 
root@knoppix # tar -cf /tmp/sicherung-etc.tar -C / etc 
root@knoppix #
Du könntest Cron nun so einstellen, dass Du nur eine "Mail von cron" bekommst wenn tar eine Fehlermeldung ausgibt - nicht "alle" Informationen ins "Nirvana" leiten.
http://www.rootforum.de/forum/viewtopic ... b3b2f222ef

So mache ich dieses - es gibt immer viele verschiedene Möglichkeiten :wink:

Gruß fuzzy

jengelh
Beiträge: 7
Registriert: 20.12.2004 19:18:49
Wohnort: Göttingen
Kontaktdaten:

Beitrag von jengelh » 28.12.2004 17:49:30

fuzzy hat geschrieben:Hallo jengelh,
Auch wenn das von dem Ursprungsthema wegführt:
Mir ging es darum, dass Du bei einem Backup mit "tar" und "cron" die Ausgaben mit der tar-Option "-C" reduzieren kannst.

Code: Alles auswählen

root@knoppix # tar -cf /tmp/sicherung-etc.tar /etc 
root@knoppix # tar: Removing leading `/' from member names 
root@knoppix # tar -cf /tmp/sicherung-etc.tar -C / etc 
root@knoppix #
Du könntest Cron nun so einstellen, dass Du nur eine "Mail von cron" bekommst wenn tar eine Fehlermeldung ausgibt - nicht "alle" Informationen ins "Nirvana" leiten.
http://www.rootforum.de/forum/viewtopic ... b3b2f222ef

So mache ich dieses - es gibt immer viele verschiedene Möglichkeiten :wink:

Gruß fuzzy
Na ja man koennte ja:

tar -cf etc etc etc 2>&1 | grep -v "^tar: Removing leading"

Benutzeravatar
nonsenz
Beiträge: 232
Registriert: 26.10.2002 20:16:49
Wohnort: berlin

Beitrag von nonsenz » 30.12.2004 15:36:37

danke für die ganzen antworten. so werd ichs dann auch irgendwie machen denke ich.
allerdings war meine frage eher so gemeint:
kann man tar auch so benutzen, dass es diese meldungen garnicht erst ausgibt?
(ich verstehe nicht ganz die message dieser ausgabe)

danke nochmal und ciao
sascha

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22448
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von KBDCALLS » 30.12.2004 15:40:24

Tar müßte seine Fehlemeldungen auf dem Fehlerkanal ausgeben , Lite den doch in den Mülleimer /dev/null um.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

lochkarte
Beiträge: 190
Registriert: 08.12.2004 11:43:44

Beitrag von lochkarte » 30.12.2004 16:06:17

nonsenz hat geschrieben: kann ich die tar ausgabe

Code: Alles auswählen

tar: Removing leading `/' from member names
irgendwie verhindern?
Ja. Verzichte auf absolute Pfadangaben bei den zu sichernden Dateien.

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: bash-skript ausgabe

Beitrag von roli » 28.01.2005 21:06:17

Hi,
jengelh hat geschrieben: Also bei 1000 echo-Befehlen wird das bald schrecklich, wenn man hinterj eden >>$outputfile setzen muss, daher empfehle ich:

Code: Alles auswählen

if [ "$1" -eq 1 ]; then
    exec 1>datei;
else
    exec 1>bla;
fi;
echo Hallo Welt...
Betrifft natürlich auch die Ausgaben der Subprozesse(!)
wenn ich Stdout so in eine Datei schreibe, habe ich dann in einem Script noch irgendwie die Chance einzelne Ausgaben auf den Bildschirm zu schreiben? Kann ich diese globale Umleitung im Script auch wieder aufheben?
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 06.03.2005 11:58:14

Hi,

ich habe jetzt die Loesung gefunden, wie man die Umleitung wieder aufheben kann:

Code: Alles auswählen

exec 1>$(tty)
Hier ein kurzes Beispiel:

Code: Alles auswählen

~/tmp$ rm out
~/tmp$ more xxx
echo davor
exec 1>out
echo drinnen
exec 1>$(tty)
echo danach
~/tmp$ ./xxx
davor
danach
~/tmp$ more out
drinnen
~/tmp$
Vielleicht interessiert's ja auch andere.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Antworten