[Shell] 設定系統環境變數

PC Chen
程式乾貨
Published in
Oct 18, 2020

系統環境變數 聽起來好像是一個很高級的詞!但說穿了他就是一個「變數」、背景地由電腦系統儲存著,當你每次啟動系統的時候就會幫你令好這個變數(好方便~

我們在寫程式時,幾乎都會碰到「令一個變數」的操作,以 python 為例,假設我現在想要寫一個計算各種圓面積:

但我已經知道 圓周率Pi 就是一個固定數字 3.14159,但我在很多不同的 .py 中都要再令一次 Pi = 3.14159 似乎有點瑣碎、而且很容易打錯(本人手殘)。這時我想要系統自動幫我把圓周率 Pi 給存下來,之後我需要呼叫圓周率這個變數時,直接請系統給我就好了~也不容易出錯!

先來看看系統存了哪些環境變數?

以下指令適用在 macOS, linux, ubuntu 系統(win用戶抱歉啦XD),首先我們進入終端機輸入 $ env ,就會顯示系統存的變數:

可以看到 PATH 這個變數就是我們先前提到要讓 jupyter notebook 開啟時要讀取的環境變數,我們可以 echo $PATH 來單獨打印出它的詳細資訊:

所以要怎麼存新的系統環境變數?

先來個背景知識

在 macOS, linus, ubuntu 的系統下,shell 啟動的設定檔通常存在以下幾種其中之一的路徑:

etc/environment
etc/profile
~/.profile
~/.bashrc # 使用 bash 啟動 shell 的設定檔
~/.zshrc # 使用 zsh 啟動 shell 的設定檔

如果要輸出一個變數,在 shell 的基本指令可以用 export :

export Pi=3.14159

但是,如果只在終端機打 export 指令,下次啟動時就會發現這個系統變數不見了、又要再重新打一次指令,這不是我們想要的。

因此

我們只要在剛剛的設定檔中輸入export指令,這樣每次系統啟動時就會幫我們執行 export,這樣就有我們所需要的變數啦~
使用 vim 編輯器編輯剛剛那些設定檔的其中之一,然後把剛剛的 export 指令加入後儲存就可以:

vim etc/environment
vim etc/profile
vim ~/.profile
vim ~/.bashrc # 使用 bash 啟動 shell 的設定檔
vim ~/.zshrc # 使用 zsh 啟動 shell 的設定檔

像我是用 zsh 啟動 shell,因此在 ~/.zshrc 中加入 export 指令,並使用 wq 儲存後離開:

使用 vim 編輯 ~/.zshrc 並儲存

儲存好後記得重新啟動一下設定檔,用 source 指令:

source etc/environment
source etc/profile
source ~/.profile
source ~/.bashrc # 使用 bash 啟動 shell 的設定檔
source ~/.zshrc # 使用 zsh 啟動 shell 的設定檔

這時,就來檢查看看新儲存的變數

用指令 env 來看看儲存了哪些變數

當然,你也可以單獨用 echo $Pi 來呼叫看看有沒有成功:

圓周率 Pi 儲存好了

所以在 python 中怎麼呼叫系統環境變數?

回到我們一開始的範例,現在我們已經叫電腦自動幫我們存了一個圓周率 Pi,所以我只要去跟電腦要就好了,在 python 中我們可以使用 os 這個 module 幫助我們獲取系統變數:

所以當我們需要圓周率的時候,就只要使用 os.environ['Pi'] 就能夠拿到啦~因為每次系統都會幫我們存,我們也不用再另外令一個變數~

--

--

PC Chen
程式乾貨

喜歡接觸與動手實作各種軟體技術的後端數據工程師 A data- backend engineer who is enthusiastic in learning and implementing any techniques in software engineering.