2016-10-21 7 views
0

に私のエコー出力をリダイレクトする私はシェルスクリプト内のロジックを実装していたファイル

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

echo "My log output" $LOGOUTPUT 

は出力:

/tmp/testlog.txt 私のログ出力は、>>リダイレクトする方法はあります私の上記の行の代わりに/tmp/testlog.txtへのエコー出力をコンソールに表示します。

注:このから離れソリューション

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

の下に示唆いけないしてください他のソリューション?

+0

いただきました!間違ってこの提案? echo "My log ouptut" >> /tmp/testlog.txt – Vahid

+0

'LOGFILE =" >> /tmp/testlog.txt "'は文字列を作成します。これは単一のエンティティです。あなたはそれをあなたのやり方で使うことはできません。あなたの 'echo'ステートメントはあなたの試みで2つの引数を受け取ります。それはあなたが望むものではありません。 – arkascha

+0

提案に間違いはありません。エコーコマンドの出力をシリアルまたはファイルに切り替える必要があるという特別な要件があります。私はLOGFILE変数の値を変更することでこれを行うことができます。代替案を見つける。 – Murali

答えて

0

LOGFILE変数の外にあるリダイレクト文字を使用してください。

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

echo "My log output" >> $LOGFILE 
0

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

私はこの方法は、通常はそれを使用する:この機能は、例えば、それを/tmp/test.log与え

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

コール、それは内のすべてのあなたのプログラムの出力をログに記録しますstdとerrの出力に表示されないようにします。

EDIT:ONLYファイルへ リダイレクト:>> "filename.t 2>&1

+0

これは私の要件を解決しません。私はすべてのエコー出力をLOGOUTPUTに割り当てられた値に基づいてstdoutまたはログファイルにリダイレクトする必要がありますvaraiable – 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 
関連する問題