teeを使用してコードブロックのSTDOUTをブロック内で定義されたファイル名でキャプチャする方法は?

teeを使用してコードブロックのSTDOUTをブロック内で定義されたファイル名でキャプチャする方法は?

送りたい標準出力ファイルのスクリプトブロックの場合、その名前はブロック内の変数によって定義されます。しかし、私が使うときティー、ブロック外の変数がもう存在しないようです。いいえティー、変数がまだ存在します。

スクリプト:

#!/bin/bash
{
    log="mylog.txt"
    echo log: $log
} |tee $log

echo log: $log

結果:

log: mylog.txt
log:

そしてではない私のログ.txt生成されたファイルティー

ベストアンサー1

 #!/bin/bash
 log="mylog.txt"
 {
     echo log: $log
 } |tee $log

パイプは、コマンドのリストがサブシェルで実行されるようにします。変数が別のサブシェルにあるため、上に渡すことはできません。したがって、変数を正しく使用するには、変数をパブリックコンテキストに移動する必要があります。

おすすめ記事