Shell输出函数内的重定向

时间:2010-06-01 19:47:31

标签: linux bash function scope

function grabSourceFile
{
    cd /tmp/lmpsource
    wget $1 >  $LOG
    baseName=$(basename $1)
    tar -xvf $baseName > $LOG
    cd $baseName
}

当我调用此函数时捕获的输出不会转到日志文件。输出重定向工作正常,直到我调用该函数。 $ LOG变量设置在文件的顶部。我尝试回应语句,他们不会打印。我猜这个函数捕获输出本身?如果是这样,如何将输出推送到文件而不是控制台。 (上面的wget打印到控制台,而函数内部的回显什么都不做。)

3 个答案:

答案 0 :(得分:3)

如前所述,您正在两次写入相同的日志文件。您的函数正在记录'wget'的输出,然后使用tar命令覆盖该输出。

我自己,我喜欢在功能之外登录。这将减少您的日志文件被破坏的可能性。它还使功能代码保持整洁。

function grabSourceFile
{
        cd /tmp/lmpsource
        wget $1
        baseName=$(basename $1)
        tar -xvf $baseName
        cd $baseName
} >> $LOG

或者只是这样做:

grabSourceFile >> $LOG

答案 1 :(得分:1)

重定向在函数内部和外部的工作方式相同。

您的问题可能是您需要一个大于符号的双倍而不是一个大于号的符号。即wget $1 >> $LOGtar命令的重定向会截断wget的输出。

答案 2 :(得分:1)

我发现了问题。这是与wget。 wget有一个专门用于记录的选项,因为我猜它不能使用>重定向它的输出。 (有诅咒的东西。) 我的工作职能最终成为:

function grabSourceFile
{
        cd /tmp/lmpsource
        wget -a /tmp/lamps_install.log $1
        baseName=$(basename $1)
        tar -xvf $baseName >> $LOG
        cd $baseName
}