2014-09-10 110 views
0

我試圖做一個腳本來將一些輸出從一些函數重定向到一個文件。這是我的代碼的樣子。Bash將多個函數的輸出重定向到一個文件

#!/bin/bash 

touch /var/log/test.log 
results=/var/log/test.log 

outputFormat() 
{ 
    echo "This is outputFormat" >> results 
} 

outputParseFull() 
{ 

    echo "This is outputParseFull" >> results 
    outputFormat; 
} 

outputParseFull; 

運行後,會創建/var/log/test.log,但文件本身是空白的。我想讓該文件包含以下

這是outputParseFull

這是OUTPUTFORMAT

一號線必須從每個功能。我在這裏做錯了什麼?

回答

1

您正在寫入一個名爲results的文件,而不是在變量$results中使用文件名。

echo "This is outputParseFulll" >> results 

應該是

echo "This is outputParseFulll" >> $results 
1
1.

),使用變量時,應該使用$results代替純results

2),可以短腳本,重定向從函數的輸出,如:

results="./file" 
touch "$results" 

outputFormat() { 
    echo "This is outputFormat" 
} 

outputParseFull() { 
    echo "This is outputParseFull" 
    outputFormat; 
} 

outputParseFull >"$results" 

3)時常引用的文件名,如"$filename"。 (因爲它們可以包含空格)

+1

+1''bash'語法的一個不明確的角落是,您還可以將輸出重定向應用於函數的定義:'outputParseFull(){...; }>「$ results」'。這將重定向每個調用的函數的標準輸出(也就是說,每個調用都會覆蓋文件的內容;每次調用該函數時都使用'>>「$ results」'附加到文件中)。 – chepner 2014-09-11 12:57:11

+0

@chepner - WOW - 這對我來說是新的。去閱讀它。 THANX! ;) – jm666 2014-09-11 12:59:33

相關問題