2010-06-01 144 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