一個環境變量確定先是一個變量git
既然是一個變量,那麼其值的改變就能夠改變某個程序的運行結果,變量值可能會在執行期間被修改。變量能夠經過不一樣的語法來設置,調用和清除。在計算機上則表現爲影響其運行進程的行爲。每一個應用程序都會引用環境變量,如計算機登陸時將主目錄設置爲一個環境變量。github
Windows 普通權限打開 cmd
或 PowerSehll
程序時,則會默認打開這樣一個目錄。%USERPROFILE%
shell
Windows 管理員權限打開cmd
或 PowerSehll
程序時,則會默認打開這樣一個目錄 %SystemRoot%\system32
編程
由於計算機在查找運行該進程的用戶所擁有的目錄結構,並將其顯示出來。不一樣權限的用戶,在不一樣目錄下打開的 cmd
或 powershell
進程時其目錄結構確定是不一樣的,因此顯示的目錄也就不一樣。Linux 或 Mac 下打開終端會顯示 HOME 變量。併發
進程是由一個或多個線程執行的計算機程序的實例。它包含程序代碼及其活動。根據操做系統的不一樣,一個線程能夠由多個併發指令的執行線程組成。多個進程可能與同一程序相關聯。例如,打開同一個程序的多個實例一般會執行多個進程。一個 Chrome (程序)用標籤頁或新窗口打開多個網站(多個實例)任務管理器中的進程會增長對應的數量。函數
每一個進程都有一個環境塊,其中包含一組環境變量的名稱及其值。環境變量有兩種類型:用戶環境變量(爲系統中的某個用戶設置,其餘用戶沒法使用)和系統環境變量(爲全部用戶設置,全部用戶共享)當應用程序初始化期間,會訪問到某個進程,並經過環境變量的名稱能夠將它們加載並訪問。默認狀況下,子進程繼承其父進程的環境變量。如由命令處理器啓動的程序將繼承命令處理器的環境。網站
如在 powershell
中輸入以下命令操作系統
cd C:\Users // 環境變量爲 =C: 也就是當前驅動器,將其設置爲 C:\Users // 如今 win32 的目錄設置爲 C:\Users D: cd D:\Program Files // 環境變量爲 =D: 也就是當前驅動器,將其設置爲 D:\Program Files // 如今 win32 的目錄設置爲 D:\Program Files A: // 當前 win32 目錄設置爲 C:/Users DIR // 展現 C:/Users 下的文件目錄結構
當咱們從新切換爲 C 盤時,至關於問命令處理程序,咱們最後一次訪問 C 盤的時候所保留的目錄是什麼?它會查看其環境並找到 =A:
變量,並獲得當前驅動器的當前目錄,也就是將 win32 目錄設置爲當前目錄。這些變量的值被導出到環境中,由於咱們但願子進程繼承「每一個僞造的驅動器的當前目錄」命令行
環境變量如 Path
,就是至關於一個指定的變量 Path
在其調用過程的環境中有定義,若是有定義,則會顯示這個變量的值。Path
會查找你輸入的命令和與命令相對應的程序。若是要將某些應用程序保留在其主目錄的 bin 文件夾中,則必須將該目錄添加到 Path
中,以便於操做系統發出命令時能夠在其中查找要運行的應用程序。線程
在 PowerShell
中,每一個環境變量都由一個對象表示。環境變量的名稱是 字典鍵,環境變量的值是 字典值。如下例子爲 PowerShell
修改和顯示 Path
Get-Item Env:Path $Env:Path $Env:Path += ";C:\test" Set-Item -Path Env:path -Value ($Env:Path + ";C:\test")
這裏的更改僅在當前會話中有效,即臨時環境變量(在一個新的 cmd
或者 powershell
中無效)相似 cmd
中的 Set
命令。永久更改須要將更改存儲到註冊表中,可在高級系統設置中將環境變量更改並應用。
動態環境變量,是 cmd
啓用命令行擴展時支持的僞環境變量,它們的值能夠更改,但不會存儲在環境中。
echo %DATE% echo %TIME%
其實爲何每次安裝某些編程環境時你都須要手動設置環境變量 Path
,由於你須要在命令解釋程序如 cmd
或者 powershell
運行某個命令或程序,而這條命令或程序在當前環境中根本不存在。因此,會報以下錯誤。
"XXX" 不是內部或外部命令,也不是可運行的程序 或批處理文件。 XXX : 沒法將「XXX」項識別爲 cmdlet、函數、腳本文件或可運行程序的名稱。請檢查名稱的拼寫,若是包括路徑,請確保路徑正確
若是我之前有仔細想過 NPM 設置一次軟件包安裝路徑,全部的在其文件夾下的程序或命令就能夠一直使用了的緣由以及某些 NPM 軟件包即便升級了,但也依然可使用相同的命令,我可能會明悟的早一些吧。
因此,大部分狀況下咱們在 Windows 下關注環境變量到底是幹什麼的,主要目的就是由於你懶得設置環境變量 Path,而命令解釋程序直接抓瞎,滿腦子黑人問號。「你說的這東西在哪呢?不在這兒啊?這疙瘩我都找完了,你換個目錄吧,要不就是你沒裝這個軟件,反正這鍋我不背」
本篇文章由一文多發平臺ArtiPub自動發佈