2017-05-30 2 views
0

Ich versuche, ein Skript zu ändern, jemand für Unix in Shell erstellt. Dieses Skript wird hauptsächlich verwendet, um auf gesicherten Servern ohne menschliche Interaktion zu laufen, aber ich musste ein weiteres Skript erstellen, um Benutzern die Eingabe von Informationen zu ermöglichen. Es ändert sich also nur in die alte Version für Benutzereingaben. Aber das größte Problem, auf das ich stoße, ist der Versuch, Fehlerprotokolle und Echos in einer Protokolldatei zu speichern. Das Skript hat viele davon, aber ich wollte diese auf dem Terminal anzeigen lassen und sie auch an die angegebene Protokolldatei senden, um später darauf eingegangen zu werden.Senden von Echo und Fehler an Terminal und Dateiprotokoll

Was ich habe, ist dies:

exec 1> ${LOG} 2>&1 

Diese Linie so ziemlich alles in die Protokolldatei senden wird. Das ist alles gut, aber ich habe auch Leute, die versuchen, Informationen in das Skript einzugeben, und es sendet alles an die Protokolldatei einschließlich des Echos, das für die Eingabeaufforderung benötigt wird. Diese Zeile steht auch am Anfang des Skripts, liest aber mehr in die stderr- und stdout-Nachrichten. Ich habe versucht:

exec 2>&1 1>>${LOG} 
exec 1 | tee ${LOG} But only getting error when running it this "./bash_pam.sh: line 39: exec: 1: not found" 

Ich habe über Website ging such as this um das Problem zu lösen, aber ich verstehe nicht, warum es nicht beide nicht gedruckt. Die Art, wie ich es einfüge, sendet es entweder nur an den Log-Ort und nicht an das Terminal oder es sendet es an das Terminal, aber nichts wird im Log geharrt.

EDIT: Einige der Lösungen, für diese haben erwähnt, dass bestimmte Fixes in bash funktionieren, aber nicht in/bin/sh.

+0

Wenn ich richtig verstehe, wollen Sie nur Fehler in stdout angezeigt und in einer Datei protokolliert werden? –

+0

Nun, ich wollte, dass die Echos zum Terminal kommen, aber gleichzeitig wollte ich die Echos und Fehler zum Log-Ort gesendet. –

+0

Mit "Echos" meinen Sie keine Fehlerausgabe, das ist unklar. –

Antwort

0

Wenn Sie alle Ausgaben möchten auf der Konsole ausgegeben werden, während auch ein logfile.txt gedruckt werden Sie diesen Befehl auf Ihrem Skript ausführen würde:

bash your_script.sh 2>&1 | tee -a logfile.txt 

Oder rufen sie in der Datei:

<bash_command> 2>&1 | tee -a logfile.txt 

Zum Anhängen an logfile.txt anstelle des Überschreibens die -a-Option zu tee hinzufügen.

+3

Dies überschreibt 'logfile.txt' für jede neue Zeile am Terminal. Sie benötigen 'tee -a', um neue Zeilen an die Protokolldatei anzuhängen. –

+0

@GeorgeVasiliou Ich bin mir nicht sicher, ob das OP anhängen möchte, aber ich werde es als eine Notiz hinzufügen – TheGirrafish

Verwandte Themen