2017-08-23 4 views
1

この簡単な例を使用して、各コマンドの前にタイムスタンプが付いたファイルにすべてを記録できます。私はタイムスタンプをコンソールに表示したくありません。Bash - すべての出力をファイルに記録しますが、ログにタイムスタンプも含めます

以下の例では、タイムスタンプは画面に表示されますが、ログには表示されません。

#!/usr/bin/env bash 

exec > >(tee -i logfile.txt | ts '[%Y-%m-%d %H:%M:%S]') 

exec 2>&1 

echo "Sending files to S3 ..." 
s3cmd MYFILE s3://MYBUCKET/ 
echo "Done" 

答えて

1

あなたがteets必要があり、あなたが標準出力を変更したくないとして、ネストされたプロセスの置換:

exec > >(tee -a >(ts '[%Y-%m-%d %H:%M:%S]' > logfile.txt)) 
+0

また、あなたが '' tsの '[%F%のTを]' を使用することができるかもしれ、あなたの 'strftimeのは(3)' manページ –

+0

THANKS ALOTをチェック!私は数時間頭を打っていた。 – luckytaxi

1

あなたはmoreutilsツールを使用しているので、あなたがpeeコマンドを使用することができます:

exec > >(pee cat "ts '[%Y-%m-%d %H:%M:%S]' > logfile.txt") 
関連する問題