4

グローバル変数の値を変更したいと考えています。関数を正常に実行すると、完全に機能します。でも、ティーで実行するときはそうではありません。画面とファイルの両方に出力するには、ティーが必要です。

Tee がこの動作を引き起こすのはなぜですか? Tee を使用して関数内のグローバル変数を変更する方法はありますか?

FCT_main()
{
MY_VAR=2
}

MY_VAR=1

echo "MY_VAR=$MY_VAR"   # -> print 1.
FCT_main | tee file.out
echo "MY_VAR=$MY_VAR"   # -> print 1, but I expect 2 !

echo "\n"

echo "MY_VAR=$MY_VAR"   # -> print 1.
FCT_main
echo "MY_VAR=$MY_VAR"   # -> print 2 as expected.
4

2 に答える 2

4

問題はありませんtee。パイプ操作付きです。パイプ内の各コマンドは、個別のサブシェルで実行されます。

そのため、関数内の変数に加えられた変更は反映されません。

次のプロセス置換を行うことができますが、それでもパイピングと同等ではありません。

FCT_main > >( tee file.out )

: プロセス置換は一部のシェルでのみ機能します。このコードは、bash シェルで動作することがわかりました。

コード全体

FCT_main()
{
MY_VAR=2
}

MY_VAR=1

echo "MY_VAR=$MY_VAR"   # -> print 1.
FCT_main > >( tee file.out )
echo "MY_VAR=$MY_VAR"   # -> print 1, but I expect 2 !

echo "\n"

echo "MY_VAR=$MY_VAR"   # -> print 1.
FCT_main
echo "MY_VAR=$MY_VAR"   # -> print 2 as expected.
于 2013-07-17T08:51:44.937 に答える