Я запускаю следующий файл с перенаправителем > log.log , и он не фиксирует ошибки.

#!/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 somedude@someplace.com < 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

При запуске из файла из окна терминала появляются следующие ошибки, но они не записываются в 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

Что я делаю неправильно? Я знаю, что с Windows вы можете добавить 2>&1 для захвата данных об ошибках. Есть ли такая вещь для Linux?

2 ответа2

3

Файловый дескриптор 1 - это стандартный вывод, 2 - это стандартный вывод. Это относится как к Linux, так и к Windows. С помощью «> logfile» вы перенаправляете stdout в файл "logfile", но на самом деле вам нужно перенаправить stderr. Это можно сделать с помощью «2> filename» или «2> & 1» (в сочетании с «> logfile») как в Windows, так и в Linux, но обратите внимание, что порядок может быть значительным, поэтому это должно быть «command> logfile 2> & 1 ", а не наоборот.

1

Вы можете перенаправить стандартную ошибку в файл следующим образом:

mycommand 2> error.log

и вы можете использовать следующий синтаксис для перенаправления как стандартного вывода, так и стандартной ошибки в файл:

mycommand &> file

или же

mycommand > file-name 2>&1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .