我使用重定向器运行以下文件> 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 [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
当我从终端窗口运行文件时会出现以下错误,但它们并未写入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 有这样的功能吗?
答案1
文件描述符 1 是 stdout,2 是 stderr。这适用于 Linux 和 Windows。使用 ">logfile",您将 stdout 重定向到文件“logfile”,但您实际上想要的是重定向 stderr。在 Windows 和 Linux 上,可以使用“2>filename”或“2>&1”(与 ">logfile 结合使用)来完成此操作,但请注意顺序可能很重要,因此应该是“command >logfile 2>&1”,而不是相反。
答案2
您可以将标准错误重定向到这样的文件:
mycommand 2> error.log
您可以使用以下语法来重定向标准输出和标准错误保存到文件:
mycommand &> file
或者
mycommand > file-name 2>&1