请教一个子shell传递变量给父shell的问题

ebug
请教一个子shell传递变量给父shell的问题

rpm_uninstall () {
    { {   rpm -qa|grep -i cyrus-sasl-sql; } && { rpm -qa|grep -i mysql; } } | while read line
    do
        if [ -n $line ]; then
            rpms="$rpms $line"            
        else
            echo "no rpm"
        fi
    done
   
   rpm -e $rpms
}
您好:
    我希望找出系统中“cyrus-sasl-sql”和“mysql”有关的包 然后卸载掉,发现waker说的子shell不能传递变量给父shell的问题,这个有什么好的办法解决呢?请指教,谢谢    [email]youngerliu@hotmail.com[/email]

jinl
为什么要用子shell,直接传递不行么?
rpm -qa|grep -i "cyrus-sasl-sql|mysql"|while read line

ebug
[quote]原帖由 [i]jinl[/i] 于 2008-7-1 23:11 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8714893&ptid=1186064][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
为什么要用子shell,直接传递不行么?
rpm -qa|grep -i "cyrus-sasl-sql|mysql"|while read line [/quote]


这个函数的公呢个是卸载相应的rpm包。
我的意思是,在do循环完成后确实把得到的rpm包赋值给了变量rpms,但是跳出循环后echo $rpms确是空的

jinl
[quote]原帖由 [i]ebug[/i] 于 2008-7-1 23:16 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8714932&ptid=1186064][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]



这个函数的公呢个是卸载相应的rpm包。
我的意思是,在do循环完成后确实把得到的rpm包赋值给了变量rpms,但是跳出循环后echo $rpms确是空的 [/quote]
这个你验证过?

ebug
[quote]原帖由 [i]jinl[/i] 于 2008-7-1 23:20 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8714957&ptid=1186064][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]

这个你验证过? [/quote]


恩 验证过了 在循环的过程中 echo $rpms是理想得到的结果 但一旦结束循环后再echo $rpms  结果为空

jinl
那就用文件过渡
rpm -qa|grep -i "cyrus-sasl-sql|mysql" > rpm.log
while read line
do
.....
done < rpm.log
rpm -e $rpms