之前學習 Java 的時候,感覺最難做的一件事情就是配置 jdk 的環境。那叫一個困難啊,Path、JAVA_HOME、CLASSPATH 印象深刻的很...(但是現在 JDK11 不用再配置 classpath 了,jre 和 jdk 合併了)。
就在去年暑假,要 配 OpenCV 的環境,要調的東西還是比較多的,對環境配置的概念又加深了。
現在懂的多了,配過的環境也多了,配過的平台也不算少。現在就想分享一下「關於我對配環境這件事情的感受」。
那就以 Windows 來說說環境配置的問題,Linux 下的其實差不多。
為什麼需要環境變量#
我記得計算機網絡的老師在給我們講 ip/mac 地址的時候提過一個例子:
** 問:** 你剛到這個班,班裡都是新同學,你想找班裡的小明同學該怎麼辦?
** 答:** 在班裡喊一聲小明。這當然可以,小明肯定會響應你。在網絡上來說也是如此。但是,如果有一張座位表,上面有每個同學的座位信息,你想找到某個人是不是就很簡單了。
環境變量也是如此,也很適合這個例子。
當用戶在 cmd 中執行一個命令的時候,命令行的解釋器就會去找你要執行的命令。
那麼是去哪裡找可執行的命令呢?兩個地方:
- 當前路徑下的可執行文件
- 環境變量 Path 中保存的路徑下的可執行文件(包括系統變量和用戶變量)
舉個例子#
舉個樹薯:
win + r
大家都用過吧,經常用來快速運行某些程序,比如打開命令行窗口我們就會用到:
那電腦是怎麼知道 cmd 在哪兒的呢?
能看到 cmd.exe
是在 C:\Windows\System32\
和 C:\Windows\SysWOW64\
這兩個路徑下都有的,那就是說,電腦是去這兩個路徑之一打開的 cmd.exe
,那我們來看一下,系統環境變量裡到底有沒有這兩個路徑的其中一個呢?
查看一下系統的環境變量中的 Path 是不是有這個路徑:
在小娜的輸入框裡輸入 path
或者「環境」可以直接跳轉到修改環境變量的地方,不行的話只能在計算機圖標右鍵屬性了。
可以發現有,驗證了我們的想法~
所以這個流程我們也弄清楚了:
你在運行窗口輸入 cmd:
-> 解釋器去尋找這個文件:
-> 先尋找當前路徑下是否有
-> 再尋找環境變量中的Path保存的路徑是否有
-> 沒找到就報沒找到
所以如果你沒配置某個可執行文件到 Path 裡,那你就得手動輸入該文件的絕對路徑才能打開了。
Path 外的其他字段#
其他的一些字段也是方便我們使用的,想用的時候使用 %字段名%
就能調用了。
比如說我在系統設置裡設置了 CMDER_ROOT
字段,將其賦值為D:\0ArtinD\cmder
,這是一個路徑。
然後我想打開該路徑,就可以使用該字段名啦:
簡單來說!就是編程中的變量名。定義一個常量,想用的時候可以使用。
在 Windows CMD 中,我們可以使用 %VAR%
來使用一個變量。
set VAR=hello
echo %VAR%
在 Unix Bash (Linux, Mac, etc.) 中,我們可以使用 $VAR
來使用一個變量。
export VAR=hello
echo $VAR
在 PowerShell 中,我們可以使用 $env:VAR
來使用一個變量。
$env:VAR = "hello"
Write-Output $env:VAR
用戶變量和系統變量#
操作系統中有用戶的概念。
用戶變量只對當前登錄的用戶生效。
系統變量對當前計算機的所有用戶生效。