|
藍森林 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讀~~
不知道可以嗎? |
| |