rklm schrieb:
BillMaier schrieb:
am Anfang meines Skripts habe ich fürs Logging folgende Zeile stehen:
| exec 2>/var/log/SCRIPT_error.log
|
Leider hängt sich die Bash genau an dieser Zeile auf.
Was genau soll das bedeuten?
Was soll was bedeuten? Der Befehl oder meine Beschreibung?
Befehl:
5.4 Umlenken mit dem Befehl exec toptop
Mit dem Befehl exec können Sie sämtliche Ein- bzw. Ausgaben von Kommandos eines Shellscripts umleiten. Hier die Syntax:
# Standardausgabe nach Ausgabedatei umlenken
exec >Ausgabedatei
# Standardausgabe nach Ausgabedatei umlenken
# und ans Ende der Datei anfügen
exec >>Ausgabedatei
# Standardfehlerausgabe nach Ausgabedatei umlenken
exec 2>Fehler_Ausgabedatei
# Standardfehlerausgabe nach Ausgabedatei umlenken
# und ans Ende der Datei anfügen
exec 2>>Fehler_Ausgabedatei
# Standardeingabe umlenken
exec <Eingabedatei
Quelle: http://openbook.rheinwerk-verlag.de/shell_programmierung/shell_007_003.htm#RxxKap00700304004E741F01B172
Beschreibung: s.u.
Bei mir funktioniert es wunderbar:
$ bash -c 'exec 2>/var/log/x; echo 1; echo 2 >&2'
bash: /var/log/x: Permission denied
1
2
Ich habe halt nur nicht die erforderlichen Berechtigungen.
Korrekt, funktioniert bei mir auch.
In der Bash (ohne Skript):
hängt sich ebenfalls auf.
$ bash -c 'exec 2>/tmp/kaputt; echo 1; echo 2 >&2'
1
$ cat /tmp/kaputt
2
Geht.
Richtig, bei mir auch.
Getestet für folgende Systeme:
Ubuntu 12.04, Ubuntu 14.04, Debian 7
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.2 LTS
Release: 14.04
Codename: trusty
$ uname -a
Linux babelfish 3.13.0-46-generic #79-Ubuntu SMP Tue Mar 10 20:06:50 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
$ bash --version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
# uname -a
Linux josua 3.13.0-46-generic #79-Ubuntu SMP Tue Mar 10 20:06:50 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
# bash --version
GNU bash, Version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Als Workaround nutze ich jetzt die Umleitung außerhalb des Skripts in der crontab.
Kennt jemand das Problem / den Bug und weiß eine Lösung, wie ich das innerhalb des Skripts realisieren kann?
Es ist nicht wirklich klar, was das Problem eigentlich ist. "Hängt sich auf" ist eine ziemlich undeutliche Beschreibung und nachvollziehen kann ich es auch nicht.
Ich versuchs nochmal: "hängt sich auf" sieht so aus:
root@josua:/home/marc# exec 2>/var/log/test
D.h. ich krieg keinen Prompt mehr, Strg+C zeigt keine Reaktion.
Jetzt wollte ich das eben innerhalb eines Skripts nachspielen um Dir zu zeigen - jetzt tut es. Dabei hab ich das letzte Woche mit 4 verschiedenen Systemen probiert.
Moment mal...
So, jetzt hab ich das Skript von letzter Woche zur Hand genommen, das eben nicht durch lief, weil es an der exec-Stelle "hing", also eben stockte und nicht zum nächsten Befehl kam.
// edited: habs mal mit
bashbug
als BugReport gemeldet. Hoffe, das war die richtige Adresse.
Ich glaube, das war keine so gute Idee.
Könnte sein, deshalb hab ich ja hier Korrektur.
Vielleicht hängst Du mal ein minimales Skript als Attachment an, das den Fehler reproduziert.
Wie gesagt, jetzt tut es zumindest bei mir zu Hause. Komm jetzt echt in Zweifel, weil ich hatte das extra meinen Kollegen noch prüfen lassen, der auch ratlos war.
Ich melde mich wieder - definitiv!