我試圖重定向我的腳本的輸出,它需要在腳本內部調用。將shell腳本的輸出重定向到一個文件
filename=uname -a
filename="$filename" date
2>&1 | tee $filename".txt"
這是我到目前爲止,但它顯然是錯誤的。我不知道太多SH腳本,所以幫助表示讚賞
-Alex
我試圖重定向我的腳本的輸出,它需要在腳本內部調用。將shell腳本的輸出重定向到一個文件
filename=uname -a
filename="$filename" date
2>&1 | tee $filename".txt"
這是我到目前爲止,但它顯然是錯誤的。我不知道太多SH腳本,所以幫助表示讚賞
-Alex
filename=uname -a filename="$filename" date 2>&1 | tee $filename".txt"
... 如果你看一下我上面貼 我試圖動態命名日誌 並用發球打印到兩個 控制檯和命令行的代碼。
我認爲你在尋找這樣的事情:的[重定向標準輸出複製到從bash腳本本身的日誌文件]
filename="$(uname -n)-$(date +%F).txt"
{
dostuff
domorestuff
} 2>&1 | tee "$filename"
你應該只打印一切回聲安慰。然後你可以將它重定向到日誌。例如:
# 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
這並不能真正回答我的問題。如果你看看我上面發佈的代碼,我試圖動態命名日誌並使用tee打印到控制檯和命令行。 – Buzkie 2010-03-08 18:49:16
它錯了,因爲你沒有正確地分配你的變量。假設date
是GNU日期,而不是您創建的某個「日期」函數。你可能正在尋找。使用$()
語法來執行命令並放入變量。
filename="$(uname -a)$(date)"
順便說一句,你確定你想使用uname -a
的文件名?例如,您可能還需要考慮格式化日期,例如date +%Y%m%d-%H%m%s
。
可能重複(http://stackoverflow.com/questions/3173131/redirect-copy-of-stdout-to-log-file-from-within-bash-script-itself) - 抱歉無恥的廣告,但我不想複製我的答案。 ;-) – DevSolar 2013-10-30 08:24:30