2016-10-21 68 views
0

我實現在shell腳本邏輯重定向我的回聲輸出到文件

#!/bin/bash 
LOGFILE=">> /tmp/testlog.txt" 

echo "My log output" $LOGOUTPUT 

輸出: 我的日誌輸出>> /tmp/testlog.txt

有什麼辦法來重定向我echo輸出到/tmp/testlog.txt而不是在控制檯上顯示的上面一行。

注:請不要建議如下解決方案

echo "My log ouptut" >> /tmp/testlog.txt 

從這個除了任何其他解決辦法?

+0

什麼是錯這個建議?回聲「我的日誌ouptut」>> /tmp/testlog.txt – Vahid

+0

'LOGFILE =「>> /tmp/testlog.txt」'創建一個字符串。這是一個單一的實體。你不能以你嘗試的方式使用它。你的'echo'語句收到你的兩個參數。這不是你想要的。 – arkascha

+0

這個建議沒有錯。我有一個特殊的要求,我需要將我的echo命令輸出切換到串行或文件。我應該可以通過更改LOGFILE變量的值來實現這一點。所以找到一個替代品。 – Murali

回答

0

嘗試使用LOGFILE變量之外的重定向字符。

#!/bin/bash 
LOGFILE=/tmp/testlog.txt 

echo "My log output" >> $LOGFILE 
0

使用exec > >(tee -i $logfile)

我使用這種方式通常是:

function start_logging() { 
    logfile="$1" 
    touch $logfile 
    exec > >(tee -i $logfile) 
    exec 2>&1 #also redirect stderr 
    return 0 
} 

調用此函數給它/tmp/test.log例如,它會記錄在你所有的程序輸出文件並防止它顯示在std和err輸出上。

編輯: 重定向只有文件:>> "filename.t 2>&1

+0

這並不能解決我的要求。我需要將所有echo輸出重定向到標準輸出或基於分配給LOGOUTPUT變量值的日誌文件 – Murali

0
function logme() 
{ 
    #Send logs to logfile 
    logfile="/tmp/logfile.txt" 

    #Send logs to stdout 
    #logfile="/dev/stdout" 

    cat >> $logfile 
} 

echo "Hello" | logme 
echo "Friend" | logme