linux環境變數 export命令詳解
由host $ export DVSDK="${HOME}/ti-dvsdk_dm368-evm_xx_xx_xx_xx"引發的問題
1、${HOME}:首先, HOME 是個變數,它代表你的 home 目錄,變數前必須加上 $ 符號,否則會報錯
usr/local/dvsdk為dvsdk的destination folder 由#echo $DVSDK測試環境變數新增成功否
2、想要使得開機時自動載入這個環境變數免除以後每次設定,可將其寫入/etc/re.localLinux export 命令
功能說明:設定或顯示環境變數。(比如我們要用一個命令,但這個命令的執行檔案不在當前目錄,這樣我們每次用的時候必須指定執行檔案的目錄,麻煩,在程式碼中先執行export,這個相當於告訴程式,執行某某東西時,需要的檔案或什麼東東在這些目錄裡)
語 法:export [-fnp][變數名稱]=[變數設定值]
補充說明:在shell中執行程式時,shell會提供一組環境變數。 export可新增,修改或刪除環境變數,供後續執行的程式使用。export的效力僅及於該此登陸操作。
參 數:
-f 代表[變數名稱]中為函式名稱。
-n 刪除指定的變數。變數實際上並未刪除,只是不會輸出到後續指令的執行環境中。
-p 列出所有的shell賦予程式的環境變數。
一個變數建立時,它不會自動地為在它之後建立的shell程序所知。而命令export可以向後面的shell傳遞變數的值。當一個shell指令碼呼叫並執行時,它不會自動得到原為指令碼(呼叫者)裡定義的變數的訪問權,除非這些變數已經被顯式地設定為可用。export命令可以用於傳遞一個或多個變數的值到任何後繼指令碼。 ----《UNIX教程》
在 linux 裡設定環境變數的方法 ( export PATH )
一般來說,配置交叉編譯工具鏈的時候需要指定編譯工具的路徑,此時就需要設定環境變數。例如我的mips-linux-gcc編譯器在“/opt/au1200_rm
/build_tools/bin”目錄下,build_tools就是我的編譯工具,則有如下三種方法來設定環境變數:
1、直接用export命令:
#export PATH=$PATH:/opt/au1200_rm/build_tools/bin
檢視是否已經設好,可用命令export檢視:
declare -x BASH_ENV="/root/.bashrc"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="localhost.localdomain"
declare -x INPUTRC="/etc/inputrc"
declare -x LANG="zh_CN.GB18030"
declare -x LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD="/opt/au1200_rm/build_tools"
declare -x PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/opt/au1200_rm/build_tools/bin"
declare -x PWD="/opt/au1200_rm/build_tools/bin"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_AUTH_SOCK="/tmp/ssh-XX3LKWhz/agent.4242"
declare -x SSH_CLIENT="10.3.37.152 2236 22"
declare -x SSH_CONNECTION="10.3.37.152 2236 10.3.37.186 22"
declare -x SSH_TTY="/dev/pts/2"
declare -x TERM="linux"
declare -x USER="root"
declare -x USERNAME="root"
可以看到灰色部分有設定的路徑,說明環境變數已經設好,PATH裡面已經有了我要加的編譯器的路徑。
2、修改profile檔案:
#vi /etc/profile
在裡面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
3. 修改.bashrc檔案:
# vi /root/.bashrc
在裡面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
後兩種方法一般需要重新登出系統才能生效,最後可以通過echo命令測試一下:
# echo $PATH
看看輸出裡面是不是已經有了 /my_new_path這個路徑了。
另有:4.
修改/etc/re.local檔案:
# vi /etc/re.local
在裡面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
-----------------------------------------------------------------------------------------------------------------------
“/bin”、“/sbin”、“ /usr/bin”、“/usr/sbin”、“/usr/local/bin”等路徑已經在系統環境變數中了,如果可執行檔案在這幾個標準位置,在終端命令列輸入該軟體可執行檔案的檔名和引數(如果需要引數),回車即可。
如果不在標準位置,檔名前面需要加上完整的路徑。不過每次都這樣跑就太麻煩了,一個“一勞永逸”的辦法是把這個路徑加入環境變數。命令 export $PATH="路徑”(或“PATH=$PATH:路徑”)($PATH為環境變數名,如DVSDK;呼叫時用$DVSDK)可以把這個路徑加入環境變數,但是退出這個命令列就失效了。要想永久生效,需要把這行新增到環境變數檔案裡。有兩個檔案可選:“/etc/profile”和使用者主目錄下的“.bash_profile”,“/etc/profile”對系統裡所有使用者都有效,使用者主目錄下的“.bash_profile”只對這個使用者有效。
export $PATH="$PATH:路徑1:路徑2:...:路徑n” (或“PATH=$PATH:路徑1:路徑2:...:路徑n" ),意思是可執行檔案的路徑包括原先設定的路徑,也包括從“路徑1”到“路徑n”的所有路徑。當用戶輸入一個一串字元並按回車後,shell會依次在這些路徑裡找對應的可執行檔案並交給系統核心執行。那個“$PATH”表示原先設定的路徑仍然有效,注意不要漏掉。某些軟體可能還有“PATH”以外型別的環境變數需要新增,但方法與此相同,並且也需要注意“$”。
注意,與DOS/Window不同,UNIX類系統環境變數中路徑名用冒號分隔,不是分號。另外,軟體越裝越多,環境變數越添越多,為了避免造成混亂,建議所有語句都新增在檔案結尾,按軟體的安裝順序新增。
格式如下():
# 軟體名-版本號
PATH=$PATH:路徑1:路徑 2:...:路徑n
其他環境變數=$其他環境變數:...
在“profile”和“.bash_profile”中,“#”是註釋符號,寫在這裡除了視覺分隔外沒有任何效果。
設定完畢,登出並重新登入,設定就生效了。如果不登出,直接在shell裡執行這些語句,也能生效,但是作用範圍只限於執行了這些語句的shell。
相關的環境變數生效後,就不必老跑到軟體的可執行檔案目錄裡去操作了。
-----------------------------------------------------------------------------------------------------------------------
執行一個指令碼時,會先開啟一個子shell環境(不知道執行其它程式是不是這樣),然後將父shell中的所有系統環境變數複製過來,這個指令碼中的語句就在子shell中執行。(也就是說父shell的環境變數在子shell中可以呼叫,但反過來就不行,如果在子shell中定義了環境變數,則只對該shell或者它的子shell有效,當該子shell結束時,也可以理解為指令碼執行完時,變數消失。)為了證明這一點,請看指令碼內容:
test=’value’
export test
這樣的指令碼執行完後,test實際上是不存在的。接著看下面的:
test=’value’
export test
bash
這裡在指令碼最後一行再開一個子shell,該shell應該是指令碼檔案所在shell的子shell,這個指令碼執行完後,是可以看到test這個變數的,因為現在是處於它的子shell中,當用exit退出子shell後,test變數消失。
如果用source對指令碼進行執行時,如果不加export,就不會在子shell中看到這個變數,因為它還不是一個系統環境變數呀,如指令碼內容是:
test=’value’
用source執行後,在shell下是能看到這個變數,但再執行bash開一個子shell時,test是不會被複制到子shell中的,因為執行指令碼檔案其實也是在一個子shell中執行,所以我再建另一個指令碼檔案執行時,是不會輸入任何東西的,內容如:echo $test。所以這點特別注意了,明明在提示符下可以用echo $test輸出變數值,為什麼把它放進指令碼檔案就不行了呢?
所以得出的結論是:1、執行指令碼時是在一個子shell環境執行的,指令碼執行完後該子shell自動退出;2、一個shell中的系統環境變數才會被複制到子shell中(用export定義的變數);3、一個shell中的系統環境變數只對該shell或者它的子shell有效,該shell結束時變數消失(並不能返回到父shell中)。3、不用export定義的變數只對該shell有效,對子shell也是無效的。
後來根據版主的提示,整理了一下貼子:為什麼一個指令碼直接執行和用source執行不一行呢?這也是我自己碰到的一個問題。manual原文是這樣的:Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename.明白了為什麼不一樣了吧?直接執行一個指令碼檔案是在一個子shell中執行的,而source則是在當前shell環境中執行的。
相關推薦
linux環境變數 export命令詳解
由host $ export DVSDK="${HOME}/ti-dvsdk_dm368-evm_xx_xx_xx_xx"引發的問題 1、${HOME}:首先, HOME 是個變數,它代表你的 home 目錄,變數前必須加上 $ 符號,否則會報錯 usr/local/d
Linux jdk環境變數配置與詳解
/etc/profile: 該檔案登入作業系統時,為每個使用者設定環境資訊,當用戶第一次登入時,該檔案被執行。也就是說這個檔案對每個shell都有效,用於獲取系統的環境資訊,如果你的計算機僅
【Linux】Linux定時任務Crontab命令詳解
星期幾 ima 默認 定時 最好 表示 時間 path 配置文件 linux 系統則是由 cron (crond) 這個系統服務來控制的。Linux 系統上面原本就有非常多的計劃性工作,因此這個系統服務是默認啟動的。另 外, 由於使用者自己也可以設置計劃任務,所以, Lin
Linux基礎進程命令詳解
linux運維學習進程有關基礎命令一、進程定義1、進程就是CPU未完成的工作,而且它是其中運行著一個或多個線程的地址空間和這些線程所需要的系統資源。二、Linux系統進程和一些有關進程的命令1、ps命令 ps [options] 1》ps - report a snapshot of the c
【轉載】linux下的mount命令詳解;
文件的 flag 自動加載 網絡文件系統 解決問題 選項 lock home 多個參數 以下內容來自:http://blog.csdn.net/clozxy/article/details/5299054 http://linux.chinaunix.net/techdo
Linux上的free命令詳解-收藏
cnblogs sed () 回收 dha 二維數組 版式 nbsp shared 解釋一下Linux上free命令的輸出。 下面是free的運行結果,一共有4行。為了方便說明,我加上了列號。這樣可以把free的輸出看成一個二維數組FO(Free Output)。例如
Linux crontab 定時任務命令詳解
-1 data new ubuntu 時間間隔 服務 run back use Linux Crontab 定時任務 命令詳解 [日期:2016-02-13] 來源:Linux社區 在工作中需要數據庫在每天零點自動備份所以需要建立一個定時任務.我選擇在Linux下使用
Linux定時任務Crontab命令詳解
自動 monthly ons 命名 維護 我們 周期 你在 腳本文件 linux 系統則是由 cron (crond) 這個系統服務來控制的。Linux 系統上面原本就有非常多的計劃性工作,因此這個系統服務是默認啟動的。另 外, 由於使用者自己也可以設置計劃任務,所以, L
Linux文件管理命令詳解及練習
Linux文件管理命令Windows裏對於文件的管理比較直觀,但Linux呢?如何在Linux系統裏創建、復制、移動、刪除文件與目錄呢?這其實是個問題,但隨著學習的進行,這將不再是個問題;一:文件管理類命令名稱?命令的歸納:1、創建文件:? touch? ? ? ? ? ? ? ? ? ? ? ? ? 2、查
Linux自學筆記(4):Linux獲取幫助的命令詳解
Linux獲取幫助的命令詳解 man linux命令幫助的獲取 外部命令:都有一個可執行程序,位於文件系統都目錄下; echo (COMMAND) 內部命令: help COMMAND 外部命令幫助:(1)幫助手冊 COMMAND --help # COMMAND -
Linux三劍客值awk命令詳解
數據處理 程序 package mysq regular 邏輯與 body 相同 導致 一、awk介紹 AWK是一種優良的文本處理工具。它不僅是 Linux 中也是任何環境中現有的功能最強大的數據處理引擎之一。這種編程及數據操作語言(其名稱得自於它的創始人 Alfred A
Linux監控工具vmstat命令詳解
原帖地址:http://www.ha97.com/4512.html 一、前言 很顯然從名字中我們就可以知道vmstat是一個檢視虛擬記憶體(Virtual Memory)使用狀況的工具,但是怎樣通過vmstat來發現系統中的瓶頸呢?在回答這個問題前,還是讓我們回顧一下Linux
Linux之檔案查詢命令詳解
find 查詢檔案 find ./ -type f 查詢目錄 find ./ -type d 查詢名字為test的檔案或目錄 find ./ -name test 查詢名字符合正則表示式的檔案,注意前面的‘.*’(查詢到的檔案帶有目錄) find ./ -regex .*so.*\.gz 查詢目
【轉載】Linux下安裝軟體命令詳解
【轉載日期】2018.09.11 【轉載標題】Linux下安裝軟體命令詳解 ----------------------------------------------------------------------------------------------
linux find和locate命令詳解
linux中find命令優點是能實現精確查詢,缺點對系統資源耗費大。 一:檔案查詢命令,按檔名稱查詢. 官方要求檔名需要加雙引號,保證搜尋的完整性。 find 目錄 -iname " init "(不區分大小寫) find 目錄 -name “init
Linux系統中ls命令詳解
ls命令是linux下最常用的命令。ls命令就是list的縮寫 1. 命令格式: ls [選項,常用引數] [目錄名] 2. 命令功能: 列出目標目錄中所有的子目錄和檔案。 3. 常用引數: -a, –all 列出目錄下的所有檔案,包括以 . 開
Linux 備份壓縮 : zip命令詳解
zip命令可以用來解壓縮檔案,或者對檔案進行打包操作。zip是個使用廣泛的壓縮程式,檔案經它壓縮後會另外產生具有“.zip”副檔名的壓縮檔案。 語法 zip(選項)(引數) 選項 -A:調整可執行的自動解壓縮檔案; -b<工作目錄>:指定暫時存放檔案的目錄
Linux 系統設定 : enable 命令詳解
enable命令用於臨時關閉或者啟用指定的shell內部命令。若要執行的檔名稱與shell內建命令相同,可用enable -n來關閉shell內建命令。若不加-n選項,enable可重新啟動關閉的命令。 linux shell命令執行時,shell總是先在自己的shell
Linux 系統設定 : insmod 命令詳解
insmod命令用於將給定的模組載入到核心中。Linux有許多功能是通過模組的方式,在需要時才載入kernel。如此可使kernel較為精簡,進而提高效率,以及保有較大的彈性。這類可載入的模組,通常是裝置驅動程式。 語法 insmod(選項)(引數) 選項 -f:不檢
Linux 系統設定 : lsmod 命令詳解
lsmod命令用於顯示已經載入到核心中的模組的狀態資訊。執行lsmod命令後會列出所有已載入系統的模組。Linux作業系統的核心具有模組化的特性,應此在編譯核心時,務須把全部的功能都放入核心。您可以將這些功能編譯成一個個單獨的模組,待需要時再分別載入。 語法 lsmod