2017-06-15 1 views
1

をファイルに追加:はstdoutにエコー、私はこれを持って

echo "all done creating tables" >> ${SUMAN_DEBUG_LOG_PATH} 

が、それだけでstdoutに書き込み、ファイルにはない追加する必要があります。 stdoutに書き込んで同じbash行のファイルに追加するにはどうしたらいいですか?

+0

は –

+0

OKうーん、私は私がどのように..あなたは正しいことができますねパイプstdoutを "コンソール" /現在のTTYにもしますか?あなたは私が尋ねているものを知っている:) –

答えて

4

何かを使用しますか?

echo "all done creating tables" | tee -a "${SUMAN_DEBUG_LOG_PATH}" 
+0

ええ、それは動作しているように見えます - もしティーがかなり多くの* nixマシンですぐに利用できるなら、どんな考えですか? macosで動作するようです。 –

+0

ああそう...私はあなたがどこでもそれを見つけるだろうと思う。 Linuxではcoreutilsの一部です – mauro

+0

['tee'](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/tee.html)はPOSIX標準の一部です。 – chepner

2

は、このようなteeコマンド

$ echo hi | tee -a foo.txt 
hi 
$ cat foo.txt 
hi 
+0

ああ、私は尋ねることを忘れて、これは、TTYとファイルの両方にstderrを送信するのだろうか? –

1

通常のティーが使用されている、しかしちょうどbashの使用バージョン:ファイルである、stdoutに書き込みを行っている

#!/bin/bash 

function mytee(){ 
    fn=$1 
    shift 
    IFS= read -r LINE 
    printf '%s\n' "$LINE" 
    printf '%s\n' "$LINE" >> "$fn" 
} 


SUMAN_DEBUG_LOG_PATH=/tmp/abc 
echo "all done creating tables" | mytee "${SUMAN_DEBUG_LOG_PATH}" 
+0

これは純粋な 'bash'でそれを行うことは本当にあなたを助けるものではありません。とにかくパイプのRHSのために新しいプロセスをフォークする必要があるので、そのプロセスで 'bash'ではなく' tee'を実行することもできます。 – chepner

+0

これは、発生するログの量によって異なります。これがたくさんある場合は、exec >>()も機能しますが、実際は余分なフォークです。それはすべて、ティーが利用可能かどうかにかかっています。しかし、あなたはまだbashでこれを行うことができますが、データの接頭辞とマングリングはできません。 – CowboyTim

+0

改善のための@chepner thxしかし、windowsyファイル名の "$ fn"にはfn = "$ 1"も必要ですか? :-) – CowboyTim

関連する問題