Uruchomiłem następujący plik z > log.log
readresatorem 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>&1
aby przechwytywać dane błędów. Czy jest coś takiego dla Linuksa?
linux
redirection
Flotsam N. Jetsam
źródło
źródło
command &> filename
przekierować zarówno stdout, jak i stderr do pliku o nazwiefilename
.2>&1
pracy 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.Odpowiedzi:
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.
źródło
2>/dev/null
z Windows2>nul
- chyba że używaszcygwin
lub innych.Możesz przekierować standardowy błąd do pliku takiego jak ten:
i możesz użyć następującej składni, aby przekierować zarówno standardowe wyjście, jak i standardowy błąd do pliku:
lub
źródło