2016-09-15 12 views
1

端末とログファイルで異なるものを出力するためにbashスクリプトを取得しようとしましたが、使用するコマンドが不明です。例えば スクリーンとログファイルにBash出力が異なっています

#!/bin/bash 
freespace=$(df -h/| grep -E "/" | awk '{print $4}') 
greentext="\033[32m" 
bold="\033[1m" 
normal="\033[0m" 
logdate=$(date +"%Y%m%d") 
logfile="$logdate"_report.log 

exec > >(tee -i $logfile) 

echo -e $bold"Quick system report for "$greentext"$HOSTNAME"$normal 
printf "\tSystem type:\t%s\n" $MACHTYPE 
printf "\tBash Version:\t%s\n" $BASH_VERSION 
printf "\tFree Space:\t%s\n" $freespace 
printf "\tFiles in dir:\t%s\n" $(ls | wc -l) 
printf "\tGenerated on:\t%s\n" $(date +"%m/%d/%y") # US date format 
echo -e $greentext"A summary of this info has been saved to $logfile"$normal 

私はターミナルでそれを表示しながら、ログファイルの最後の出力(エコー「要約を...」)を省略したいと思います。そうするような命令はありますか?これを他のスクリプトに適用したいので、特定のスクリプトの代わりに一般的なソリューションを提供することができれば嬉しいです。

EDIT 1(> & 6を適用した後):

Files in dir: 7 
A summary of this info has been saved to 20160915_report.log 
Generated on: 09/15/16 
+0

ようこそ!サイト固有の詳細(バッジ)については、[ツアー](https://stackoverflow.com/tour)をチェックすることをお忘れなく。 – cxw

答えて

0

一つのオプション:あなたの場合

exec 6>&1 # save the existing stdout 
exec > >(tee -i $logfile) # like you had it 
#... all your outputs 
echo -e $greentext"A summary of this info has been saved to $logfile"$normal >&6 
    # writes to the original stdout, saved in file descriptor 6 ------------^^^ 

>&6が保存されたファイルディスクリプタ6(端末にechoの出力を送信tee(これはファイル記述子1にあります)によって設定された出力パスではなく、対話型シェルから実行します。 bash 4.3.46でテストされています。

参考文献:"Using exec""I/O Redirection"

編集 OPが見られるように、>&6メッセージがSTDOUTオフteeによって印刷された線の後に表示することが保証されません。 1つの選択肢は、teeの代わりにthis questionの回答のようにscriptを使用し、最後のメッセージをscriptの外に印刷することです。 the docsとすると、その質問に対するstdbufの回答はteeでは機能しません。

汚いハックしてみてくださいサイトへ

#... all your outputs 
echo >&6 # <-- New line 
echo -e $greentext ... >&6 

あるいは、均等にハック、(OPごとに、これは働いていたことを、注意してください)

#... all your outputs 
sleep 0.25s # or whatever time you want <-- New line 
echo -e ... >&6 
+0

それは機能しましたが、何らかの理由で最後のエコー出力が端末で上方向にシフトしました。私はまた、4.3.46を使用しています:( – Larrrrrrrrrry

+0

@ Larrrrrrrrrryもう少し詳しく、またはおそらくスクリーンショットを含めるには、[編集]してください(http://stackoverflow.com/posts/39515426/edit) - どういう意味ですか? – cxw

+0

EDIT 1の下で自分の投稿を編集しました。「要約...」という出力は、最後の出力ではなく上方にシフトしました。 – Larrrrrrrrrry

関連する問題