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 > output
stdoutへのすべての追加出力が "output"ファイルに転送されるようにすることです。
これは拡張できます。たとえば、exec 2> error
stderrのすべての追加出力が「error」ファイルに送信されます。
これで>(...)
、出力を次に書き込むことを意味するbashismです。注文する; この場合、コマンドは「tee logfile」です。
だから我々はそれらの2つを組み合わせる。
exec > >(tee logfile)
「すべての追加出力をコマンドに書き込むtee logfile
」を意味します。
これは、将来のすべての出力が画面に送信されることを意味します。そして(経由tee
) "logfile"ファイルとして