exec>>理解する(コマンド)

exec>>理解する(コマンド)

exec > >(tee logfile)次のコードの効果を理解しようとしています。

#!/bin/bash                                                                                                                 

exec 7>&1           # save stdout for later reset                                                                           

exec > >(tee logfile)          # point stdout to FIFO pointing to tee command?                                              
#+expect any subsequent output to stdout to be sent                                                                         
#+both to stdout and logfile.                                                                                               

# so let's send some output                                                                                                 
echo
echo howdy             # expect these strings to be sent both to terminal and                                               
echo g\'day            #+logfile                                                                                            
echo hello!

# restore stdout                                                                                                            
exec 1>&7
exec 7>&-

#check content of logfile!                                                                                                  
echo ------------
cat logfile

私はexec > >(tee logfile)stdoutが>(tee logfile)

以下は、このスクリプトを実行したときの端末の出力です。

--------------------

howdy
g'day
hello!

howdy
g'day
hello!

ログファイルの内容は次のとおりです。


howdy
g'day
hello!

stdoutを端末にリダイレクトしようとすると効果がないようですexec 1>&7。おそらく、exec 1>&7ログファイルが作成され、その内容が端末に送信された後に発生する可能性があります。

そして、スクリプトを実行すると、端末の出力がわかりません。読むexec > >(tee logfile)前にブロックされると思います。cat logfileその後、ログファイルの内容はtee logfile

これを理解するのに役立ちますか?

ありがとうございます。

ベストアンサー1

このコマンドの一般的な形式は、exec > outputstdoutへのすべての追加出力が "output"ファイルに転送されるようにすることです。

これは拡張できます。たとえば、exec 2> errorstderrのすべての追加出力が「error」ファイルに送信されます。

これで>(...)、出力を次に書き込むことを意味するbashismです。注文する; この場合、コマンドは「tee logfile」です。

だから我々はそれらの2つを組み合わせる。

exec > >(tee logfile)「すべての追加出力をコマンドに書き込むtee logfile」を意味します。

これは、将来のすべての出力が画面に送信されることを意味します。そして(経由tee) "logfile"ファイルとして

おすすめ記事