在bash中如何从管道函数中修改外部变量?

时间:2013-04-30 08:58:57

标签: bash variables scope pipe

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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