У меня есть собственный сценарий, который архивирует файлы журнала, когда им один день. В моем сценарии все ошибки (stderr) записываются в файл, и в конце сценария я использую этот файл, чтобы узнать, было ли его выполнение хорошо или нет.
Эта часть моего кода выглядит как
# redirection of stderr to file
exec 2> /tmp/errors.txt
# gzip old log files
find *.log -mtime +1|xargs gzip -f
# test if error log file is empty
if [ -s /tmp/errors.txt ]; then
.....
fi
Моя проблема: этот код отлично работает, если есть хотя бы один файл для gzip, но если нет, он вызывает ошибку, когда я не хочу.
Я пробовал разные решения для решения этой проблемы, но безуспешно.
кто-нибудь знает, как решить эту проблему?
Если вы используете версию xargs GNU, вы можете использовать -r
:
--no-run-if-empty
-r If the standard input does not contain any nonblanks, do not run
the command. Normally, the command is run once even if there is
no input. This option is a GNU extension.
Код:
# redirection of stderr to file
exec 2> /tmp/errors.txt
# gzip old log files
find *.log -mtime +1|xargs -r gzip -f
# test if error log file is empty
if [ -s /tmp/errors.txt ]; then
.....
fi
Попробуй это
#redirect stderr to null
exec 2> /dev/null
FILECOUNT = `find *.log -mtime +1|wc -l`
#redirection of stderr to file
exec 2> /tmp/errors.txt
# gzip old log files
if [ $FILECOUNT != '0' ]; then
find *.log -mtime +1|xargs gzip -f
fi
# test if error log file is empty
if [ -s /tmp/errors.txt ]; then
.....
fi`