2010-03-08 178 views
0

我試圖重定向我的腳本的輸出,它需要在腳本內部調用。將shell腳本的輸出重定向到一個文件

filename=uname -a 
filename="$filename" date 

2>&1 | tee $filename".txt" 

這是我到目前爲止,但它顯然是錯誤的。我不知道太多SH腳本,所以幫助表示讚賞

-Alex

+0

可能重複(http://stackoverflow.com/questions/3173131/redirect-copy-of-stdout-to-log-file-from-within-bash-script-itself) - 抱歉無恥的廣告,但我不想複製我的答案。 ;-) – DevSolar 2013-10-30 08:24:30

回答

4
filename=uname -a 
filename="$filename" date 

2>&1 | tee $filename".txt" 

... 如果你看一下我上面貼 我試圖動態命名日誌 並用發球打印到兩個 控制檯和命令行的代碼。

我認爲你在尋找這樣的事情:的[重定向標準輸出複製到從bash腳本本身的日誌文件]

filename="$(uname -n)-$(date +%F).txt" 
{ 
    dostuff 
    domorestuff 
} 2>&1 | tee "$filename" 
0

你應該只打印一切回聲安慰。然後你可以將它重定向到日誌。例如:

# my_file.sh 
echo "Doing stuff" 
# Do stuff 

# Invocation: 
my_file.sh > my_log.log 

這給你最靈活和優雅。

您也可以直接編寫腳本從登錄,如:

# my_file.sh 
echo "Doing stuff" > my_log.log 
# Do stuff 
+0

這並不能真正回答我的問題。如果你看看我上面發佈的代碼,我試圖動態命名日誌並使用tee打印到控制檯和命令行。 – Buzkie 2010-03-08 18:49:16

1

它錯了,因爲你沒有正確地分配你的變量。假設date是GNU日期,而不是您創建的某個「日期」函數。你可能正在尋找。使用$()語法來執行命令並放入變量。

filename="$(uname -a)$(date)" 

順便說一句,你確定你想使用uname -a的文件名?例如,您可能還需要考慮格式化日期,例如date +%Y%m%d-%H%m%s

相關問題