配置環境變量(以 JDK 1.8爲例)macOS Mojave

什麼是環境變量

環境變量(environment variables)一般是指在操作系統中用來指定操作系統運行環境的一些參數,如:臨時文件夾位置和系統文件夾位置等。
環境變量是在操作系統中一個具有特定名字的對象,它包含了一個或者多個應用程序所將使用到的信息。例如Windows和DOS操作系統中的path環境變量,當要求系統運行一個程序而沒有告訴它程序所在的完整路徑時,系統除了在當前目錄下面尋找此程序外,還應到path中指定的路徑去找。用戶通過設置環境變量,來更好的運行進程。

環境變量有什麼作用

1.設置參數

環境變量相當於給系統或用戶應用程序設置的一些參數,具體起什麼作用這當然和具體的環境變量相關。比如 PATH,是告訴系統,當要求系統運行一個程序而沒有告訴它程序所在的完整路徑時,系統除了在當前目錄下面尋找此程序外,還應到哪些目錄下去尋找;再如 tc 或 vc++ 中,set include = path1; path2; 是告訴編譯程序到哪裏去找 .h 類型的文件;當然不僅僅是指定什麼路徑,還有其它的作用的,如 set dircmd=/4 設置一個環境變量的作用是在使用 di r命令時會把 /4 作爲缺省的參數添加到你的 dir 命令之後,就像你的每個命令都加了 /4 參數,它實際上是給命令解釋程序 command 設置的一個環境變量,並且是給 dir 這個內部命令設置的。
分析本地故障時原因很可能就是因爲環境變量中的默認路徑被刪除的結果,默認路徑一經設置,當前系統如有程序運行時需要某些 DLL 或 EXE 文件,以及 Active 控件時就會到所有默認路徑中去查找,如果在這些目錄中查找到相應的程序則自動加載,查找不到則報告缺少某某文件的錯誤信息。

2.軟件共用

很多朋友會在自己的計算機上安裝雙系統,例如 C 盤安裝 Windows XP,D 盤安裝 Windows 7。可是某些軟件往往只在 Windows XP 系統中安裝,Windows 7 系統中是無法正常使用的,比較麻煩卻有效的方法是再安裝一遍。當我們瞭解了環境變量中的用途後就可以很好解決雙系統的軟件共用問題。

3.系統運行

爲什麼在 Windows XP 中安裝了的軟件在 Windows 7 下無法運行呢(綠色軟件除外)?原因是安裝軟件時往往須要向系統目錄中複製某些文件,而使用另外一個系統時會由於缺少這些文件而無法運行。因此,我們可以通過設置環境變量的方法來解決這個問題。

0.自己的理解

當我們需要編譯 Java 文件的時候

  1. cd 到 Java 的目錄下
  2. 執行 Java 命令
    看上去條理清晰,邏輯縝密,但是當我們需要同時使用多個工具的時候,比如又有 Java、Maven、Git 等等,而且是多臺機器的時候,我們通常需要很多繁瑣的 cd 操作。而配置環境變量就可以使我們可以快速的運行這些腳本了。

當我們需要快速切換 JDK 的版本

如果我們又有JDK1.7,又有JDK1.8,而且需要經常的切換,那麼怎麼辦?
可以配置局部變量:

export JDK1.7=/usr/apps/jdk1.7
export JDK1.8=/usr/apps/jdk1.8
export PATH=$JDK1.7/bin

這樣,在改變的時候,就不需要去不到改變,而改變部分句可以了。

環境變量的作用

它的作用就是,可以在任何目錄下,都能快速地通過自定義的環境變量來訪問到你指定的工具目錄裏的內容嗎,這和 OS 裏的快捷方式的思想比較類似,或者說是指針。

Mac 系統的環境變量

先來看一下自己 Mac 裏的環境變量有什麼吧

打開終端,輸入 echo $PATH 出現下面的界面:
在這裏插入圖片描述
即:

Gandr$ echo $PATH
/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:.

能看到,筆者的 Mac 中 PATH 環境變量有:
/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

環境變量文件的優先級

/etc/profile
/etc/paths
~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc

注:Linux 裏面是 .bashrc 而 Mac 是 .bash_profile

/etc/profile 和 /etc/paths 是系統級別的,系統啓動就會加載,後面幾個是當前用戶級的環境變量。
後面 3 個按照從前往後的順序讀取,如果 /.bash_profile 文件存在,則後面的幾個文件就會被忽略不讀了,如果 /.bash_profile 文件不存在,纔會以此類推讀取後面的文件。~/.bashrc沒有上述規則,它是bash shell打開的時候載入的。

PATH的語法爲如下
#中間用冒號隔開
export PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:

上述文件的科普:
/etc/paths (全局建議修改這個文件 )
編輯 paths,將環境變量添加到 paths文件中 ,一行一個路徑
Hint:輸入環境變量時,不用一個一個地輸入,只要拖動文件夾到 Terminal 裏就可以了。
/etc/profile (建議不修改這個文件 )
全局(公有)配置,不管是哪個用戶,登錄時都會讀取該文件。
/etc/bashrc (一般在這個文件中添加系統級環境變量)
全局(公有)配置,bash shell執行時,不管是何種方式,都會讀取此文件
.profile 文件爲系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行.並從/etc/profile.d目錄的配置文件中搜集shell的設置
使用注意:如果你有對/etc/profile有修改的話必須得重啓你的修改纔會生效,此修改對每個用戶都生效。
./bashrc 每一個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取.
使用注意 對所有的使用bash的用戶修改某個配置並在以後打開的bash都生效的話可以修改這個文件,修改這個文件不用重啓,重新打開一個bash即可生效。
./bash_profile 該文件包含專用於你的bash shell的bash信息,當登錄時以及每次打開新的shell時,該文件被讀取.(每個用戶都有一個.bashrc文件,在用戶目錄下)

.bash_profile文件存在於用戶主目錄下,絕對路徑爲 /home/$name/.bash_profile
.bash_profile 文件是隱藏文件,裏面包含的是用戶的用戶的環境變量。

在/home下的用戶文件夾下,查看一下隱藏文件

這個文件不一定存在,如果存在,就在 ~/ ,即
~/.bash_profile但也很可能不存在,這時創建一個空文件,加入自己想要的內容就行。Linux中的配置文件很多都是這樣,是要在需要時建立的,而程序在沒有這些配置文件時,也可能正常運行。

使用注意 需要需要重啓纔會生效,/etc/profile對所有用戶生效,~/.bash_profile只對當前用戶生效。

source ./.bash_profile 或者 ./.profile 環境信息生效

以 JDK 爲例,添加環境變量

1.輸入touch .bash_profile,創建一個 .bash_profile 的隱藏配置文件(如果你之前沒有創建過)

2.輸入open -e .bash_profile,打開配置文件

3.輸入以下配置:

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
PATH=$JAVA_HOME/bin:$PATH:
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export JAVA_HOME
export PATH
export CLASSPATH

注意:第一行的路徑 jdk1.8.0_162.jdk/Contents/Home,JDK 版本不同,路徑名也不同,注意修改。(爲你自定義的安裝路徑)
然後保存關閉該窗口。

在這裏插入圖片描述

4.輸入source .bash_profile,使配置生效

5.輸入java -version,如果能看到 JDK 版本爲你所下載的版本,說明配置成功

在這裏插入圖片描述

備註:如果只在終端使用 export
這個命令寫入環境變量,它配置的只是臨時變量,不能長期保存,電腦開關機後或重新打開終端或另開一個窗口,仍然會回到沒有配置環境變量的狀態。(真實性有待考證)

這裏還有一種另外的配置文件的書寫方法:

需要配置特別的環境名稱位置,需要 export 名稱 = 具體位置
下面是具體例子:

PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin::/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin:yourpathaddress/Library/Android/sdk/platform-tools:yourpathaddress/Library/Android/sdk/tools

export JAVA_HOME=yourpathaddress/System/Library/Frameworks/JavaVM.framework/Home

ANDROID_HOME=yourpathaddress/Library/Android/sdk/ 

這裏JAVA_HOME、ANDROID_HOME輸入的路徑都是你本地安裝的具體地址

配置環境變量 PATH 的方法

1.終端直接用 export 語句

export PATH=${PATH}:~/Library/Android/sdk/platform-tools:~/Library/Android/sdk/tools

以上操作確實達到了修改環境變量的目的, 但是僅僅保證對此次會話有效,也就是說當你重啓終端後,你配置的這個 adb 的環境變量就失效了, 又得需要重新輸入一次。
我們可以用 shell 的配置文件來將這條 shell 命令"持久化", 每次啓動終端都自動運行。
配置文件裏可以預置一些 shell 命令, 每次打開終端時自動加載配置文件,,從而實現預置代碼的自動運行。

2.編寫 shell 的預置配置文件

2.1 尋找當前 shell 的配置文件

echo $SHELL 來查看當前 shell 的版本,使用的 shell 不同,對應的配置文件也不同。

如果是 bash

vim ~/.bash_profile 或者 vim ~/.bashrc

如果是 zsh

vim ~/.zshrc

通過如下命令可切換shell
//切換到zsh
chsh -s `which zsh` 
//切換到bash
chsh -s `which bash`

重啓終端 (如果是 Linux 可能需要重啓系統才能生效)。
其他 shell 可通過 cat /etc/shells 查看當前系統已安裝的 shell 所有版本。

2.2 修改配置文件

export PATH=${PATH}:~/Library/Android/sdk/platform-tools:~/Library/Android/sdk/tools

2.3 重載配置文件, 使修改生效

最直接的方式:重啓終端
最優雅的方式:重載配置文件

source ~/.bash_profile 或者 . ~/.bash_profile

2.4 export 語法詳解

· ${}爲佔位符,${PATH} 和 $PATH 等效
· =前後不能有空格
· : 爲分隔符(等同於 Windows 環境變量中的 ;)
· PATH=$PATH:xxx 可以理解爲 "PATH+=xxx"(當然不能這麼寫)
· PATH=xxx:$PATH 這種寫法亦可,只是前後順序的問題;

以上命令可以拆爲兩行:

(1)把 adb 所在路徑 ~/Library/Android/sdk/platform-tools:~/Library/Android/sdk/tools 加入到 PATH 中去:

PATH=${PATH}:~/Library/Android/sdk/platform-tools:~/Library/Android/sdk/tools

(2)使環境變量生效:

export PATH

shell 中可以通過 export -p 命令查看所有環境變量。

3.修改 /etc/profile 文件

如果你的計算機僅僅作爲開發使用時推薦使用這種方法,因爲所有用戶的 shell 都有權使用這些環境變量,可能會給系統帶來安全性問題。
· 用文本編輯器打開 /etc/profile
· 在profile文件末尾加入:

export JAVA_HOME=/usr/share/jdk1.6.0_14
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

·重新登錄

注:
a. 你要將 /usr/share/jdk1.6.0_14 改爲你的 JDK 安裝目錄
b. Linux 下用冒號":“來分隔路徑
c. PATH/PATH/CLASSPATH/$JAVA_HOME 是用來引用原來的環境變量的值在設置環境變量時特別要注意不能把原來的值給覆蓋掉了,這是一種常見的錯誤
d. CLASSPATH 中當前目錄”."不能丟,把當前目錄丟掉也是常見的錯誤.
e. export 是把這三個變量導出爲全局變量
f. 大小寫必須嚴格區分

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章