2010-06-01 103 views
0
function grabSourceFile 
{ 
     cd /tmp/lmpsource 
     wget $1 > $LOG 
     baseName=$(basename $1) 
     tar -xvf $baseName > $LOG 
     cd $baseName 
} 

当我调用此函数捕获的输出不会去往日志文件。输出重定向工作正常,直到我调用该函数。 $ LOG变量设置在文件的顶部。我试着回应声明,他们不会打印。我猜测该函数捕获输出本身?如果是的话,如何将输出推送到文件而不是控制台。 (上面的wget打印到控制台,而函数内部的回显不起作用。)Bash/shell脚本 - 函数内部的shell输出重定向

+0

我不会与内部功能输出重定向处理。使用exec在STDERR/STDOUT上设置/恢复输出重定向: exec 3>&2 2> /tmp/error.log; DOSOMETHING; exec 2>&3; – 2010-06-01 22:19:22

回答

1

我发现了这个问题。这是与wget。 wget的有一个选项,专门用于记录,我想这不能使用>它的输出重定向 我的工作函数结束了(一些与诅咒。):

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

我认为你对wget http://www.example.org> tmp/wget.log'为什么不起作用是正确的(Doesn也不适合我,我正在研究类似的问题)。还要注意,在你的第一个命令中你使用'tar -xvf $ baseName> $ LOG',它会覆盖$ LOG。你的第二次迭代执行追加到$ LOG的'>> $ LOG'。 – 2010-06-03 17:32:02

1

重定向在函数内部和外部的作用相同。

你的问题可能是你想要一个比符号大一倍的符号而不是一个大于符号。即wget $1 >> $LOGtar命令上的重定向将截断wget的输出。

+3

为了便于说明,当'>'覆盖文件时'''追加到文件中 – 2010-06-01 19:55:31

2

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

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

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

或者只是做:

grabSourceFile >> $LOG