抑制标准输出

抑制标准输出

这是我在 shell 脚本中的命令。我希望所有输出都重定向到标准日志文件。它做得很好,除了当它找不到带有目录或子目录的 *.txt 文件时,它将 o/p 写入 std 输出屏幕。如何抑制这种情况并将其发送到日志文件。

TOTALFILES=`ls $SOURCEDIR/$SOURCESUBDIR/*.txt| wc -l` >> $WORKDIR/$LOGFNAME

答案1

才不是“将 o/p 写入标准输出”。它将其写入stderr.而且它也不会将标准输出写入您的文件。当您使用命令替换时,您是在告诉它将 stdout 写入变量TOTALFILES

如果您希望输出同时到达变量和文件,您将需要使用tee

totalfiles=$(ls "${sourcedir}/${sourcesubdir}/"*.txt | wc -l | tee "${workdir}/${logfname}")

但是,这也不会将 stderr 发送到您的日志文件,为此您可以这样做:

totalfiles=$(ls "${sourcedir}/${sourcesubdir}/"*.txt 2>"${workdir}/${logfname}" | wc -l | tee "${workdir}/${logfname}")

stdin 是 fd0
stdout 是 fd1
stderr 是 fd2

重定向标准输出:

foo > /path/file

这相当于:

foo 1> /path/file

重定向标准错误:

foo 2> /path/file

要重定向两者:

foo > /path/file 2>&1

请注意,重定向的顺序很重要

阅读: 3.6 重定向


使用 bash,您还可以使用&>以下命令来缩短此时间:

foo &> /path/file

(您应该避免大写变量名,还应该引用所有变量并使用$( ... )反引号代替。

相关内容