0

我有两个互相调用的脚本。我需要修改两者中的给定变量。它不起作用。

A.sh:

#! /bin/sh
funcA() {
    echo "var B in funcA (1) $__varB"
    __varB="xxx"
    echo "var B in funcA (2) $__varB"
}
. B.sh

B.sh:

! /bin/sh
__varB="asdf"
funcA | tee -a out.txt 2>&1 #if no pipe then it works
echo "var B in B.sh $__varB"

执行

./A.sh
var B in funcA (1) asdf
var B in funcA (2) xxx
var B in B.sh asdf

如果在 BI 中不将 funcA 传递到 tee 中,那么它会按预期工作并且 __varB 会被修改。我的问题是,在实际情况下我无法修改 B.sh。

我可以在 A.sh 中做什么来修改 __varB ?

4

1 回答 1

1

重定向功能显然是在子外壳中运行的。为避免这种情况,您可以使用进程替换:

funcA > >( tee -a out.txt 2>&1 )

此更改必须出现在 B.sh 中。如果你不能修改它,你注定要失败。

于 2013-04-30T09:18:10.007 回答