2

次の行は、標準出力をファイルにリダイレクトし、標準出力にも出力したい場合にうまく機能します。

exec > >(tee logfile-1.txt)

ただし、後で stdout を別のファイルにリダイレクトしたい場合は、次のようにします。

exec > >(tee logfile-2.txt)

直面する問題は、出力が 2 番目のファイル (logfile-2.txt) と共に最初のファイル (logfile-1.txt) にリダイレクトされ続けることです。

同じbashスクリプトに両方のステートメントが含まれ、出力がこれらのコマンドの実行順序に対応する各ファイルに排他的である方法はありますか?

注: この質問は、ここで尋ねられた質問の解決策の延長にあります。

4

1 に答える 1

3

やる

{
    command1
    command2
} | tee logfile-1.txt

{
    command3
    command4
} | tee logfile-2.txt

または、最初に元のファイル記述子をバックアップします。

exec 6<&1
exec > >(tee log1)
echo 1
echo 2
exec 1<&6 6<&-
exec > >(tee log2)
echo 3
echo 4

より高度な使用法については、http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/x13082.htmlを参照してください。exec

于 2013-02-15T08:29:31.103 に答える