【发布时间】:2010-06-01 19:47:30
【问题描述】:
function grabSourceFile
{
cd /tmp/lmpsource
wget $1 > $LOG
baseName=$(basename $1)
tar -xvf $baseName > $LOG
cd $baseName
}
当我调用这个函数时,捕获的输出不会进入日志文件。在我调用该函数之前,输出重定向工作正常。 $LOG 变量设置在文件的顶部。我尝试回显语句,但它们不会打印。我猜这个函数会捕获输出本身?如果是这样,如何将输出推送到文件而不是控制台。 (上面的 wget 打印到控制台,而函数内部的 echo 什么也不做。)
【问题讨论】:
-
我不会处理函数内部的输出重定向。使用 exec 在 STDERR/STDOUT 上设置/恢复输出重定向: exec 3>&2 2>/tmp/error.log;做点什么;执行 2>&3;
-
wget $1 > $LOG会将标准输出重定向到文件中。如果您尝试捕获标准错误,请使用wget $1 2>$LOG,或同时捕获两者,wget $1 > $LOG 2>&1。如果使用得当,stdout 将包含“真实”数据(在wget的情况下,是下载的数据),而 stderr 将包含错误和状态消息。