作者 主題: 請教環境變數應用?  (閱讀 1794 次)

0 會員 與 1 訪客 正在閱讀本文。

joe0120

  • 活潑的大學生
  • ***
  • 文章數: 241
    • 檢視個人資料
請教環境變數應用?
« 於: 2011-10-18 18:19 »
例1:
檔案1:main.sh
#! /bin/bash
a=a
b=b
export a b

if [ -f /script/sub.sh ]; then
     sh /script/sub.sh
fi

檔案2:sub.sh
echo $a
echo $b

sh /script/main.sh
則可以顯示 a b 內容
=============================================

例2
那如果改成   
檔案1:main.sh
#! /bin/bash
a=a
b=b
export a b

檔案2:sub.sh
sh /script/main.sh
echo $a
echo $b

sh /script/sub.sh
則不能顯示 a b


=============================================

目的1:
在執行例1時,在main.sh 宣告的變數可共 sub.sh  使用
目的2:
執行 sub.sh ,可以引內 main.sh 定義的環境變數

問題:
但例2的做法,則 sub.sh 不能引用 main.sh 宣告的變數
我知道變數在宣告時,如果沒有宣告成環境變數,則切至另一個 bash 則不能引用,也不能往回引用,
但以執行例2來講,我是先呼叫main.sh再輸出變數內容,則不能顯示變數內容,然道在執行 main.sh 後,bash 就結束了嗎. 謝"
« 上次編輯: 2011-10-18 18:21 由 joe0120 »

TyroneYeh

  • 俺是博士!
  • *****
  • 文章數: 2396
  • 性別: 男
    • 檢視個人資料
Re: 請教環境變數應用?
« 回覆 #1 於: 2011-10-18 19:40 »
把變數寫到檔案裡面去吧
--
TyroneYeh

joe0120

  • 活潑的大學生
  • ***
  • 文章數: 241
    • 檢視個人資料
Re: 請教環境變數應用?
« 回覆 #2 於: 2011-10-18 20:47 »
把變數寫到檔案裡面去吧

感謝TyroneYeh兄回應

後來我突然想到,是讀取的關係,當執行 sh sub.sh 時,會先執行一次本身的 bash ,稱為父程序,程式在執行到 sh main.sh (程式中),則執行另一個子程式,則子程序執行完成後,就結束了,又回到父程序,所以就不能顯示 a b 變數結果,因父程序不能讀子程序的環境變數,所以才不能引用,這是我的想法。
« 上次編輯: 2011-10-18 21:48 由 joe0120 »

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17472
    • 檢視個人資料
    • http://www.study-area.org
Re: 請教環境變數應用?
« 回覆 #3 於: 2011-10-18 22:12 »
因為 sub.sh 裡面跑 main.sh 的時候, main.sh 是子行程。
請改用 source 吧:
source main.sh