提到配環境,很多時候就會要去編輯一個叫.bash_profile的文件。有時候又有的帖子寫的是編輯.bashrc的文件。這兩個文件是干什么的,有什么區別?
首先,這兩個文件都在~目錄下,這個~也就是你的用戶的家目錄。以我的電腦舉例:
有的可能會問,我在這看不到有這些文件,那是因為以.開頭的文件都是系統隱藏文件,要在視圖中查看的話,可以按
command + shift + .
這個組合鍵,顯示或隱藏 隱藏文件。
有很多沒有配過環境的,目錄下可能根本就沒有這個文件。那就要手動創建這個文件了。
新建文件可以先打開家目錄
cd ~
用vim 創建文件並編輯(vim如果文件存在就直接編輯,不存在則自動創建)
vim .bash_profile
不會用vim或者nano的,可以用touch命令來先創建文件(即使文件已經存在也不要緊,touch命令不會覆蓋掉已存在文件,只是更新了文件的修改時間)
touch .bash_profile
然后用文本編輯器打開這個文件去編輯
open .bash_profile
在這里插一句,對於bashrc之類的區別請移步:
https://blog.csdn.net/m0_37739193/article/details/72638074
https://www.cnblogs.com/yangqionggo/p/3280891.html
我只拿.bash_profile舉例。所以也可以看出
~目錄在當前你的用戶下,所以你在~目錄下的所有配置,也只會對你這個當前的用戶生效,全局配置在/etc/目錄下,剛才的文章也有提到。拿Windows類比的話大概就是用戶變量和系統變量的差別。別的我就不多描述了,畢竟他講的挺清楚。
另外.bash開頭的配置文件只對bash終端有效,如果用其他的終端(比如我用的zsh)就在相應的終端配置文件下修改(就是.zshrc)
接下來講一下經常編輯的一個變量,PATH。這個是干什么用的呢?可以先輸出來看一下
echo $PATH
如果沒配置過,顯示的就會是一個空行,這不是問題。可以看到我的電腦已經配置了很多路徑在這里。這有什么用呢?簡單來說就是能讓你在當前終端執行命令的時候,這個命令可以被終端識別。記住,所有的命令本質其實都是可執行文件!拿maven舉例而言,我在終端直接輸入
mvn -version
為什么直接輸入mvn就能識別並執行這個命令呢?這個就得先講講PATH的作用了。對於輸入的命令,比如xxx,終端會首先在當前目錄下去找這個文件,如果找不到,那就去PATH里的路徑去找了,從我剛才的截圖來看,就會先去/usr/local/mysql/bin目錄下去找有沒有xxx命令(:是分隔符,用來分隔路徑),如果沒有,就去下一個路徑/Users/momo/Documents/apache-maven-3.5.2/bin找。mvn命令剛好就在這個路徑下,於是就執行了mvn命令。如果xxx不在這個路徑下,就繼續往后找,直到找完所有的路徑,都沒有xxx命令,則會告訴你沒有找到這個命令
(中途換了台電腦繼續更)
那我們就可以來解釋一下例如java環境的配置了。
這些亂七八糟的是在什么東西?那就來逐一解釋。在網上下載了一個jdk以后,比如我這個jdk就叫jdk-9.0.4.jdk
(可以去目錄看一下,打開finder按組合鍵
command + shift + G
輸入路徑:
/Library/Java/JavaVirtualMachines/
)
回到剛才的配置上。第一行的JAVA_HOME就是一個變量,這個變量為你的jdk文件夾下的contents/home這個目錄
第二行classpath,之前說了多個值用:來分割,那就看第一個.表示當前目錄,第二個$JAVA_HOME/lib/dt.jar,其中$表示引用變量,所以$JAVA_HOME就是剛才的java_home的值/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home,所以這個路徑就是指/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/lib/dt.jar,可以看一下
可以發現根本就沒有這個文件,說明這個路徑其實配置了也是無效的,說明我抄的這個配置其實是有問題的,不過先不管了,繼續看后面$JAVA_HOME/lib/tools.jar,也就是/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/lib/tools.jar,看一下
也就是這兩個路徑的配置並沒有生效,所以這就說明了,百度能找到很多配置的教程,但都各種各樣,具體正確與否一定要來自己的文件下看一下。
第三、五行是maven的配置,先不看,第四行#號開頭,是注釋,也不管。第六行export JAVA_HOME
export表示導出一個變量讓其在終端中生效,就是將shell變量輸出為環境變量。所有配置的環境,一定要最終被export執行才可以生效。再往后看PATH=$JAVA_HOME/bin:$M2:$PATH:
export PATH
export PATH表示讓PATH變量變成環境變量,那重點就是PATH的值是什么了
之前說了$表示引用變量,$JAVA_HOME/bin就是/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/bin目錄了,來看一下
繼續,$M2是maven的路徑先忽略,后面怎么又有一個$PATH?這是因為,如果有的人已經之前配置過path了,這個path就已經有了值,比如PATH=abc/bin,那如果不加上這一句,現在的path就只有java的路徑和maven的路徑了,之前的abc/bin路徑就沒有了。加上這個$PATH,那因為PATH=abc/bin,所以就能把之前abc/bin這個路徑值保留下來,並且重新賦值給了新的PATH上,從而保證path值不丟失。
別急。編輯完.bash_profile這個文件之后,還需要讓這個文件被系統重新讀取一下你新編輯的配置才能讓系統生效。那怎么讓它生效呢?這就需要用到source命令了,執行
source .bash_profile
這樣,一次環境配置就算完成了。
所以,如果我們沒有配置java的環境,那我們執行java這個命令的時候每次都需要在終端輸入
現在配置完了path之后,就能直接在終端輸入java就可以了
可以看一下是不是這樣,輸入which java檢測一下
可以看到,直接執行java這個命令其實就是執行了剛才配置的這個路徑下的java命令。這就是PATH的本質作用。
(另外,我只是拿現成的這個java配置在舉例講解,也指出了這個java配置是不合理的。java的具體環境配置還請自行搜索。現附一條參考:https://www.zhihu.com/question/29114464)
作者:doctordc
鏈接:https://www.jianshu.com/p/7ad61711beef
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
