Przekierowania systemu Linux nie rejestrują błędów. Czy Linux ma odpowiednik Windows 2 i 1?

0

Uruchomiłem następujący plik z > log.logreadresatorem i nie przechwytuje on błędów.

#!/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

Podczas uruchamiania z pliku z okna terminala pojawiają się następujące błędy, ale nie są one zapisywane w 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

Co ja robię źle? Wiem, że w systemie Windows możesz dodać, 2>&1aby przechwytywać dane błędów. Czy jest coś takiego dla Linuksa?

Flotsam N. Jetsam
źródło
command &> filenameprzekierować zarówno stdout, jak i stderr do pliku o nazwie filename.
2
Myślę, że to Windows w pewnym momencie otrzymał przekierowanie podobne do tego, co jest dostępne w powłoce UNIX, a nie odwrotnie.
Martin Liversage,
2
Zabawne jest to, że nie miałem pojęcia o 2>&1pracy z oknami, więc pomyślałem, że na początku źle przeczytałem pytanie. Morał tej historii: czasami odpowiednik w innym systemie operacyjnym jest identyczny.
Karl Bielefeldt

Odpowiedzi:

3

Deskryptor pliku 1 to stdout, 2 to stderr. Dotyczy to zarówno systemu Linux, jak i Windows. Z „> logfile” przekierowujesz stdout do pliku „logfile”, ale tak naprawdę chcesz przekierować stderr. Można to zrobić za pomocą „2> nazwa pliku” lub „2> i 1” (w połączeniu z „> plik dziennika”) zarówno w systemie Windows, jak i Linux, ale pamiętaj, że kolejność może być znacząca, więc powinna to być „polecenie> plik dziennika 2> I 1 ”, a nie na odwrót.

AndiDog
źródło
Głupio założyłem, że to nie może być takie łatwe. Działa jednak podobnie jak Windows. Dziwię się, że ktoś mnie do tego nie podpalił. Mam nadzieję, że nie podsunęłem też komuś pomysłu ... Dzięki.
2
Pozostaje przynajmniej jedna różnica, tzn. Kiedy chcesz odrzucić stderr. Z Unixem robisz to 2>/dev/nullz Windows 2>nul- chyba że używasz cygwinlub innych.
ott--