2013-04-30 70 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

相關問題