代码之家  ›  专栏  ›  技术社区  ›  Joshua Enfield Daij-Djan

函数内的shell输出重定向

  •  0
  • Joshua Enfield Daij-Djan  · 技术社区  · 16 年前
    function grabSourceFile
    {
        cd /tmp/lmpsource
        wget $1 >  $LOG
        baseName=$(basename $1)
        tar -xvf $baseName > $LOG
        cd $baseName
    }
    

    当我调用这个函数时,捕获的输出不会进入日志文件。在调用函数之前,输出重定向工作正常。$log变量设置在文件的顶部。我试着重复声明,但它们不会打印出来。我猜函数会捕获输出本身?如果是这样,如何将输出推送到文件而不是控制台。(上面的wget打印到控制台,而函数内部的echo不起任何作用。)

    3 回复  |  直到 7 年前
        1
  •  3
  •   Stefan Lasiewski    16 年前

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

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

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

    或者只是这样做:

    grabSourceFile >> $LOG
    
        2
  •  1
  •   Kaleb Pederson    16 年前

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

    您的问题可能是希望使用双大于号而不是单大于号。即。 wget $1 >> $LOG . 在您的 tar 命令截断输出 wget .

        3
  •  1
  •   Joshua Enfield Daij-Djan    16 年前

    我发现了问题。是和wget一起的。wget有一个专门用于日志记录的选项,因为我想它不能使用>(有诅咒的东西)重定向输出。 我的工作职责是:

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