藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月26日 11:18


請教如何將變量從子進程導出到父進程?

請教如何將變量從子進程導出到父進程?
我在子進程中對變量進行了修改,我想把子進程對變量修改的結果導入父進程,以便在父進程中使用,我看到有書上說可以通過重定向來做到這一點,但不知如何做,望大家指點,如能舉例說明更好,謝先!

請教如何將變量從子進程導出到父進程?

直接export即可

父進程
ss="DDDDDDDDDDDDD"
export ss

子進程
echo $ss

請教如何將變量從子進程導出到父進程?

不行.
子行程沒辦法傳給父行程.

請教如何將變量從子進程導出到父進程?

跟腳本運行的環境有關,同樣,腳本裡定義了一個變量
export var=xxx
如果在子shell裡執行,則無法把var導出到父shell,如果在當前shell中執行,就可以:
[code]sh urfile.sh
. urfile.sh
[/code]
這兩個執行方法一樣麼?! ;)請看比較:
-->

請教如何將變量從子進程導出到父進程?

to 飛灰橙 你的方法不行,可能是我沒說清楚吧。
其實我的意思在高級語言fortran或c可以通過定義函數,傳遞參數,在函數體中將參數改變,然後通過返回值的方式把變量傳回到主程序中,來達到變量改變,以便主程序使用。我問的問題與這類似,在shell中該如何實現上述功能。

謝謝啟發我的所有人,希望大家繼續指點!

請教如何將變量從子進程導出到父進程?

在 ksh 及 bash 中可用 |&  進行 parent shell 和 subshell 之間的雙向通信。

# cat ./setsid.sh

#!/bin/ksh
# subshell to change sid according to input

while true
do
read a
if [ $a -eq 'ORACLE_SID2' ]; then
echo "ORACLE_SID1"
else
echo "ORACLE_SID2"
fi
done            

在 parent shell 中運行:

# setsid.sh |&
#
# sid="ORACLE_SID1"
# print -p $sid
# read -p sid
# echo $sid
ORACLE_SID2
#
# print -p $sid
# read -p sid
# echo $sid
ORACLE_SID1

如果不想將 setsid.sh 永遠在後台運行, 可去掉其中的 while 循環,
但每次在 print -p 語句前要調用 setsid.sh |& 一次。

請教如何將變量從子進程導出到父進程?

不好意思,沒有看清題意.
lightspeed 是一個好辦法.

如果僅僅要實現傳變量效果的話,
或許可以用source或.直接調用shell程序,根本就不會有子進程.

請教如何將變量從子進程導出到父進程?

subshell 修改 parent shell 的變量的確不易, 主要是 shell 沒有 c 中指針的概念。

通常幾種方法:

1.  如果只為改變量, 不用 subshell.

2. 最簡單的辦法, 用 . 或 source.  但此法有時無法應用。 原因是複雜的 parent
及 subshell 會有變量名, 函數名重複, 名空間不隔離,造成混亂。

3. 如果只有一個變量 用 var=$(subshell.sh)

4. 如果只有一個變量, 並且是 數字,可在 subshell 中 return number,
    在 parent 中  subshell.sh; var=$?

5. 我認為最好的辦法是由 David Cymbala 做的, 可以針對複雜的subshell
    改變多個變量, 也可以有其他的操作。如下例中 a=bbb 等可以是
經過不同條件下組合出來的變量。這裡做了簡化。

# cat subshell.sh
#!/bin/ksh
echo "a=bbb"
echo "b=ccc"
echo "c=aaa"

在 父 shell 中:

# a=a;b=b;c=c
# echo $a $b $c
a b c
#
# subshell.sh | while read var; do
> eval $var
> done
#
#echo $a $b $c
bbb ccc aaa

請教如何將變量從子進程導出到父進程?

用SOURCE是可以的,我用過,執行子進程的方法
. ./sub.sh

請教如何將變量從子進程導出到父進程?

用 source 就沒有產生 subshell 了, 當然可以.

我也想過在 subshell 用 stdout 送出來之後, 再用 eval 來處理.
這或是個簡單的方法.

請教如何將變量從子進程導出到父進程?

利用shell的內制函數,也不會產生子shell的

為什麼不能在shell中,即crontab中運行呢?

能解釋一下
. ./file.sh

exec()系統調用

子shell寫文件,父shell讀~~
不知道可以嗎?



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com