2013-04-30 36 views
0

我有两个脚本可以互相调用。我需要修改两个给定的变量。它不起作用。在bash中如何从管道函数内修改外部变量?

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的进入发球那么它将按预期工作和__varB被修改。我的问题是,在真实情况下,我无法修改B.sh.

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

回答

1

重定向函数显然运行在一个子shell中。为避免它,您使用过程替换:

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

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

+0

然后我注定了:)谢谢你的帮助。 – Barth 2013-04-30 09:21:10

相关问题