Kopieren stderr und stdout in eine Datei als auch der Bildschirm in der ksh
Ich bin auf der Suche nach einer Lösung (ähnlich der bash-code unten) zu kopieren, sowohl stdout und stderr in eine Datei zusätzlich zu dem Bildschirm, innerhalb ksh unter Solaris.
Folgende code funktioniert Super in der bash-shell:
#!/usr/bin/bash
# Clear the logfile
>logfile.txt
# Redirect all script output to a logfile as well as their normal locations
exec > >(tee -a logfile.txt)
exec 2> >(tee -a logfile.txt >&2)
date
ls -l /non-existent/path
Für einige Grund dieser wirft einen syntax-Fehler auf Solaris. Ich vermute, es ist weil ich kann das nicht tun Prozess-substitution, und ich habe gesehen, einige Beiträge was auf die Verwendung von mkfifo
, aber ich habe noch zu kommen mit einer funktionierenden Lösung.
Kennt jemand eine Möglichkeit, dass alle Ausgaben können umgeleitet werden zu einer Datei zusätzlich zu den Standard-Speicherorten?
InformationsquelleAutor HuggieRich | 2012-08-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Welche version der ksh verwenden Sie? Die
>()
wird nicht unterstützt, ksh88, sondern wird in ksh93 - die bash-code sollte funktionieren unverändert (abgesehen von der#!
Linie) auf ksh93.Wenn Sie stecken bleiben mit ksh88 (Armes Ding!) dann können Sie emulieren die bash/ksh93 Verhalten über eine named pipe:
Oben ist eine zweite version zu aktivieren stderr umgeleitet werden zu einer anderen Datei.
./script.sh >out.log 2>err.log
dann die Ausgabe geht.log, aber einige sollten gehen, die irren.meldenOK, so benötigen Sie einen anderen
tee
- und Rohr - ändern ursprüngliche Antwort..., Die sortiert, ausgezeichnet.
der ksh-Shell in Solaris 10 unterstützt die Prozess-substitution, aber anscheinend funktioniert es nicht für
exec
Ich denke, die tee-Prozesse läuft ewig. Kann sein, wir brauchen eine Bereinigung code, kill %Abschlag auf zweimal durchgeführt.
InformationsquelleAutor cdarke
Wie wäre es damit:
Hinzufügen
-a
zu dentee
Befehlszeile für nachfolgende Aufrufe zum Anhängen, anstatt Sie zu überschreiben.Ich sollte auch erwähnen, dass es getan werden muss im script. Ich habe einen daemon, der das Skript ausführt, erfasst alle Ausgaben in eine Logdatei, damit ich nicht die Kontrolle über den Aufruf auf der Kommandozeile.
InformationsquelleAutor twalberg
In der ksh, der folgende funktioniert bei mir sehr gut
InformationsquelleAutor JBat