私の現在のプロジェクトでは、実行中に後で必要となる変数を定義するループを実行します。私は 以降のファイルでもログを検査することができるように、ティーとログを追加したいまで すべてがうまくいきました。私は、stdoutとstderrの両方を記録したかったよう 、私は|&
(2>&1 |
のショートカット)を適用します。 しかし、不思議なことに、変数の値が失われてしまいます。バッシュ:影響範囲変数スコープをロギングできますか?
for i in 1 2 3 ; do
# ... do something meaningful ...
myVar=test1
done |& tee test1
echo "myVar=$myVar"
出力:私はファイルリダイレクトとプロセス置換、変数定義作品の組み合わせに切り替えるとき:
myVar=
はその間私はより良い動作方法を見つけました。
for i in 1 2 3 ; do
# ... do something meaningful ...
myVar=test2
done > >(tee test2 ) \
2> >(tee test2 >&2)
echo "myVar=$myVar"
出力::-)
- がなぜ値が最初の例で迷子ない理由私は理解したい
myVar=foo
しかし、?
- は、なぜそれが第二で迷子にしないのですか?あなたは
を伝えることはできますか?
パイプを使用するとパイプの両側にサブシェルが作成され、両方のパイプが終了すると、内部で環境が失われます。それは、ティーとは何の関係もなく、どんなコマンドでも試してみてください。二番目の方法は、 '>()'のためのサブシェルを作成するだけなので、そこにないものは失われません。 – 123