1. 程式人生 > >關於在Centos中設定jdk、maven等引數不生效的解決方法

關於在Centos中設定jdk、maven等引數不生效的解決方法

          在之前幾天的一篇文章中提及到關於如何在Centos中安裝jdk,在安裝完之後我們需要在/etc/profile裡面進行引數配置,然後使用source /etc/profile來使得命令生效。但是這裡有一個問題就是當在終端退出賬號,或者機器重啟之後這個變數就不會生效。PATH的配置卻沒有被更新,其他部分的都已經有更新。

我們先來了解下Linux下面關於環境變數的優先順序問題:

Linux 環境變數使用者環境變數通常被儲存在下面的檔案中:

~/.profile

~/.bash_profile 或者 ~./bash_login

~/.bashrc

系統環境變數一般儲存在下面的檔案中:/etc/environment/etc/profile/etc/bashrcUbuntu Linux 

環境變數的優先順序

1./etc/profile:在登入時,作業系統定製使用者環境時使用的第一個檔案,此檔案為系統的每個使用者設定環境資訊,當用戶第一次登入時,該檔案自動被執行。

2./etc/environment:在登入時作業系統使用的第二個檔案,系統在讀取你自己的profile前,設定環境檔案的環境變數。3.~/.bash_profile:在登入時用到的第三個檔案是.profile檔案,每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,當用戶登入時,該檔案僅僅執行一次!預設情況下,他設定一些環境變數,執行使用者的.bashrc檔案。/etc/bashrc:為每一個執行bash shell的使用者執行此檔案.當bash shell被開啟時,該檔案被讀取.~/.bashrc:該檔案包含專用於你的bash shell的bash資訊,當登入時以及每次開啟新的shell時,該該檔案被讀取。/etc/bashrc:當用戶進入shell或桌面系統自動執行的指令碼

幾個環境變數的優先順序:1>2>3

然後我們看看3裡面的指令碼內容,如下圖所示,在最後他會去讀取/etc/bashrc 這個腳本里面的內容


然後看看bashrc的程式碼 
# /etc/bashrc
# System wide functions and aliases
# Environment stuff goes in /etc/profile

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

# are we an interactive shell?
if [ "$PS1" ]; then
  if [ -z "$PROMPT_COMMAND" ]; then
    case $TERM in
    xterm*|vte*)
      if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
          PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
      elif [ "${VTE_VERSION:-0}" -ge 3405 ]; then
          PROMPT_COMMAND="__vte_prompt_command"
      else
          PROMPT_COMMAND='printf "\033]0;%
[email protected]
%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"' fi ;; screen*) if [ -e /etc/sysconfig/bash-prompt-screen ]; then PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen else PROMPT_COMMAND='printf "\033k%[email protected]%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"' fi ;; *) [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default ;; esac fi # Turn on parallel history shopt -s histappend history -a # Turn on checkwinsize shopt -s checkwinsize [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\[email protected]\h \W]\\$ " # You might want to have e.g. tty in prompt (e.g. more virtual machines) # and console windows # If you want to do so, just add e.g. # if [ "$PS1" ]; then # PS1="[\[email protected]\h:\l \W]\\$ " # fi # to your custom modification shell script in /etc/profile.d/ directory fi if ! shopt -q login_shell ; then # We're not a login shell # Need to redefine pathmunge, it get's undefined at the end of /etc/profile pathmunge () { case ":${PATH}:" in *:"$1":*) ;; *) if [ "$2" = "after" ] ; then PATH=$PATH:$1 else PATH=$1:$PATH fi esac } # By default, we want umask to get set. This sets it for non-login shell. # Current threshold for system reserved uid/gids is 200 # You could check uidgid reservation validity in # /usr/share/doc/setup-*/uidgid file if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022 fi SHELL=/bin/bash # Only display echos from profile.d scripts if we are no login shell # and interactive - otherwise just process them to set envvars for i in /etc/profile.d/*.sh; do if [ -r "$i" ]; then if [ "$PS1" ]; then . "$i" else . "$i" >/dev/null fi fi done unset i unset -f pathmunge fi # vim:ts=4:sw=4 export HISTSIZE=3000 export HISTTIMEFORMAT="%F %T " export PROMPT_COMMAND="history -a" unset HISTCONTROL export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.8.0_131/bin:/root/bin:/usr/local/git/bin

可以看到在最後是輸入一個固定的PATH變數。問題的原因就在這裡。

解決方法:

1、把java的環境變數配置在/etc/bashrc底部,這樣子每次輸出都可以讀取到

2、把java的環境變數配置放在/etc/profile.d 資料夾裡面,以.sh結尾的指令碼檔案,在/etc/bashrc中的最後PATH中增加:$PATH這個配置,把配置串聯起來,這樣子就算機器重啟也不會把PATH的變數丟失了。

參考文章:

http://carrie1314.blog.51cto.com/6634326/1296298

相關推薦

關於在Centos設定jdkmaven引數生效解決方法

          在之前幾天的一篇文章中提及到關於如何在Centos中安裝jdk,在安裝完之後我們需要在/etc/profile裡面進行引數配置,然後使用source /etc/profile來使得命令生效。但是這裡有一個問題就是當在終端退出賬號,或者機器重啟之後這個變數

Xmapp啟動Tomcat時報JdkJre未安裝錯誤的解決方法

我的Xmapp是3.2.2,用的是安裝版JDK,Tomcat用的是最新的8.0 用xmapp控制面板啟動Tomcat時報JDK、JRE未安裝錯誤,錯誤內容如下: 17:07:17 [Tomcat] Attempting to start Tomcat app... 1

AjaxPut和Delete請求傳遞引數無效的解決方法(Restful風格

在使用Ajax實現Restful的時候,有時候會出現無法Put、Delete請求引數無法傳遞到程式中的尷尬情況,此時我們可以有兩種解決方案:1、使用地址重寫的方法傳遞引數。2、配置web.xml專案環境。 測試的程式為: @RequestMapping(value =

編譯Qt程式遇到ts_opents_fd 未找到的解決方法

現象:出現類似下面的錯誤提示 /usr/local/Trolltech/QtEmbedded-4.8.0-arm/lib/libQtGui.so: undefined reference to `ts_read_raw' /usr/local/Trolltech/QtEmb

AjaxPut和Delete請求傳遞引數無效的解決方法(Restful風格)

開發環境:Tomcat9.0 在使用Ajax實現Restful的時候,有時候會出現無法Put、Delete請求引數無法傳遞到程式中的尷尬情況,此時我們可以有兩種解決方案:1、使用地址重寫的方法傳遞引數。2、配置web.xml專案環境。 測試的程式為:

vue2.0 element-uiel-upload的before-upload方法返回false時submit()生效解決方法

tip child 是我 pre gre 調用 2.0 技術 lis 我要實現的功能是在上傳文件之前校驗是否表格中存在重復的數據,有的話,需要彈窗提示是否覆蓋,確認之後繼續上傳,取消之後,就不再上傳。 項目中用的element-ui是V1.4.3 <el-upload

WindowsNginx配置nginx.conf生效解決方法

ps:      樂優商城的圖片上傳中遇到的坑,nginx.conf一直沒有生效,折磨了幾個小時,終於搞定了。 附 nginx.conf: #user nobody; worker_processes 1; #error_log lo

thinkphp3.2在home模組下的config設定生效解決方法

在全域性配置檔案Common/Conf/config.php 和Home模組配置檔案Home/Conf/config.php裡面分別新增程式碼: 'MODULE_ALLOW_LIST' => array ('Home','Admin'), 'DEFAULT_MODULE' =&g

PageHelper在springboot生效解決方法

原因: mava引入的包為: <dependency>             <groupId>com.github.pagehelper</groupId>             <artifactId>pagehel

移動端頁面以rem為單位設定字型大小生效解決方法

這個問題在前端H5頁面開發可以說是一個老生常談的問題了。由於以前所有遇到的問題以及解決方法都會以文件的形式記錄在電腦裡,而非github或者blog,所以現在才一點一滴的整理上來,就當是一個心路歷程吧。 由於開發習慣,我現在使用HBuilder 這個前端IDE。除錯頁面會經常直接開啟工具欄中的chrome,

針對ie8低版本瀏覽器document.getElementsByName方法生效解決方法

function getByName(Name){  var i = document.getElementsByName(Name);  if(i>0){    return i;  }else{    var aele = document.getElements

ansible-playbook設定java環境變數後生效解決方法

ansible playbook指令碼中有安裝jdk操作,並且設定環境變數後且source了 /etc/profile檔案,還會提示沒有JAVA_HOME 程式碼如下: - name: install jdk1.8 yum: name=jdk1.8.

CentOS安裝TomcatJDK環境詳細教程

下載Tomcat以及JDK 為了便於管理在虛擬機器的根目錄(‘/’)下新建一個env資料夾 mkdir env cd env/ 在資料夾env下新建資料夾tar,存放軟體壓縮包 mkdir tar 新建資料夾jdk1.8,存放jdk1.8的解壓檔

CENTOS檔案新建刪除移動複製命令

1.  (1)、首先說一下touch 建立檔案的命令,touch可以用於建立二進位制檔案,用法非常簡單。用法:touch+檔名,touch與檔名之間一定要有空格。  (2)、touch abc 建立完成後,用ls命令來檢視一下我們建立的檔案,大家看到圖中紅色箭頭所指的abc

RGB簡述以及Android設定透明半透明效果

一、RGB   簡單說說RGB,RGB由Red、Green、Blue三種成分色組成,每種顏色由2位16進位制數表示。   如:紅色 FF0000 表示紅全有(最滿),綠沒有,藍沒有       綠色

【Python】讀取命令列引數在PyDev設定Python執行時的引數

有時候,我們寫的命令列程式需要批次執行,這裡可以讓Python程式讀取命令列引數,再編寫一個命令列批次執行指令碼.bat,實際上就是一個充滿命令的、改了字尾名的文字檔案,在多個測試用例扔進Python程式中是非常有用的。 例如,如下圖,有一個cmdArgs.py程式,當在p

阿裏雲CentOSvsftp安裝配置卸載

配置文件 列表 span 安裝配置 conn gre vsftp 設置 div --------------------------------------------------------- 阿裏雲CentOS中vsftp安裝、配置、卸載 1--卸載 查

web的CSSXpath路徑定位方法學習

理論 公司 mov border pre -s usr 屬性 chrom 今天不到八點就到公司了,來的比較早,趁著有點時間,總結下web中的CSS、Xpath等路徑定位定位的方式吧! 簡單的介紹下xpath和css的定位 理論知識就不羅列了 還是利用博客園的首頁、直接附上代

shareSDK的初步使用(shareSDK微信qq兼容問題,以及cocoapods支持架構沖突問題的解決

hone 組件 友盟 環境 end 信息 uil platform i386 第一次使用shareSDK來做第三方分享,可是。昨天一天都是在調試bug,一直錯誤不斷! 先說下我的開發環境: xcode:5.1 真機調試:iPhone5s 我們都知道xcode5.1以後開

centos下安裝JDKTOMCAT

tomcat net nbsp log jin blank wget mirrors csdn JDK安裝配置:http://blog.csdn.net/hui_2016/article/details/69941850 JDK安裝文件:在MAC電腦裏或者百度雲裏面