Linux-Redirectors protokollieren keine Fehler. Hat Linux das Äquivalent zu Windows '2> & 1?

0

Ich > log.logführe die folgende Datei mit dem Redirector aus, und es werden keine Fehler erfasst.

#!/bin/bash

echo ************************BEGIN LOG******************************
date +"%m/%d/%Y %H:%M:%S $HOSTNAME"
cp -f /scripts/original/clamscans.log /scripts
find /public/public/clamscans/. -exec grep -n FOUND /dev/null {} \;>>clamscans.log
mail [email protected] < clamscans.log
tar cvf dailyresults.tar /public/public/clamscans/*.txt
gzip -f dailyresults.tar
mv -f /public/public/clamscans/*.txt /scripts/lastnite
echo end log entry

Die folgenden Fehler werden angezeigt, wenn ich aus der Datei im Terminalfenster starte, aber nicht in diese Datei geschrieben werde log.log:

tar: /public/public/clamscans/*.txt: Cannot stat: No such file or directory
tar: Error exit delayed from previous errors
mv: cannot stat `/public/public/clamscans/*.txt': No such file or directory

Was mache ich falsch? Ich weiß, mit Windows kann man die 2>&1Fehlerdaten erfassen. Gibt es so etwas für Linux?

Treibgut N. Jetsam
quelle
command &> filenameum sowohl stdout als auch stderr in die genannte Datei umzuleiten filename.
2
Ich denke, es ist Windows, das irgendwann eine Umleitung erhalten hat, die der in der UNIX-Shell verfügbaren ähnelt, nicht umgekehrt.
Martin Liversage
2
Das Lustige ist, ich hatte keine Ahnung 2>&1, ob ich an Windows gearbeitet habe, also dachte ich, ich hätte die Frage zuerst falsch gelesen. Moral der Geschichte: Manchmal ist das Äquivalent im anderen Betriebssystem identisch.
Karl Bielefeldt,

Antworten:

3

Dateideskriptor 1 ist stdout, 2 ist stderr. Dies gilt sowohl für Linux als auch für Windows. Mit "> logfile" leiten Sie stdout in die Datei "logfile" um, aber Sie möchten eigentlich stderr umleiten. Dies kann sowohl unter Windows als auch unter Linux mit "2> Dateiname" oder "2> & 1" (in Kombination mit "> Protokolldatei") durchgeführt werden. Beachten Sie jedoch, dass die Reihenfolge möglicherweise von Bedeutung ist und daher "Befehl> Protokolldatei 2>" lauten sollte & 1 "und nicht umgekehrt.

AndiDog
quelle
Ich nahm dummerweise an, dass es nicht so einfach sein könnte. Es funktioniert jedoch genauso wie Windows. Ich bin überrascht, dass mich jemand dafür nicht geflammt hat. Hoffe, ich habe auch nicht nur jemandem eine Idee gegeben ... Danke.
2
Es bleibt mindestens ein Unterschied, dh wann Sie stderr verwerfen möchten. Mit Unix tun Sie das, 2>/dev/nullwährend Sie es mit Windows tun 2>nul- es sei denn, Sie verwenden cygwinoder andere.
ott--