linux(一)export的生命周期


本文從shell執行的角度分析export變量的生命周期

# 只對當前shell環境起作用,比如通過不同的遠程ssh就是不同的shell環境
export k=v

 

當運行一個.sh文件或者是shell命令,shell會把當前的環境變量都復制過來,也就是子類和父類的關系。通過以下幾個場景解釋這個概念。

證明父能影響子

  1. 直接運行命令export K=V,然后echo $K,能看到輸出了V
  2. 寫一個shell腳本,echo $K,能看到輸出了V

證明子不能影響父

  1. 在一個shell腳本中export K=V,然后echo $K,能看到輸出了V。
  2. 基於1,直接運行命令echo $K,發現輸出為空

 

如果想讓shell腳本中執行的環境變量影響到父環境,那么可以用source來執行

source xxx.sh

因為source的腳本是在當前環境下執行的,也就是說沒有用子shell來執行(默認用sh xxx.sh是新建一個子shell來運行)。這樣就可以讓腳本中更改的環境變量影響到系統環境變量。但也只是當前ssh連接下的環境變量,其他連接依然不受影響。如果要更改全局的環境變量,那么可以在/etc/profile中添加export xxxx,更改完后source /etc/profile

如果想刪除該變量,可以用unset xxxx

 

總結

  1. Linux運行shell腳本是按類似繼承的方式獲取環境變量
  2. 如果想讓運行的腳本在當前環境執行,則用source,注意:如果在腳本中又調用了其他腳本也遵循這個邏輯,即用source運行的其他腳本使用當前環境,sh運行的采用子環境
  3. 以上都是臨時的,如果要重啟機器不丟失變量則需要寫入文件/etc/profile


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM