source命令

source 命令 linux

source 命令 (從 C Shell 而來) 是 bash shell 的內置命令。
點命令(就是一個點符號.,從 Bourne Shell 而來) 是 source 的另外一名稱。shell

這兩個命令都以一個腳本文件名爲參數,該腳本將做爲當前 shell 的環境執行,即不會啓動一個新的子進程。全部在腳本中設置的變量將成爲當前 Shell 的一部分,一樣的,當前腳本中設置的變量也將做爲腳本的環境。編程

source (或.) 命令一般用於從新執行剛修改的初始化文件,如 .bash_profile 和 .profile 等等。例如,若是在登陸後對 .bash_profile 中的 EDITER 和 TERM 變量作了修改,則能夠用 source 命令從新執行 .bash_profile 中的命令而不用註銷並從新登陸。像 .bash_profile 或其它相似的 Shell 腳本這樣,文件無需可執行權限便可用 source 或點命令執行。
 
source 命令的一個妙用bash

  在編譯核心時,經常要反覆輸入一長串命令,如
  make mrproper
  make menucon**
  make dep
  make clean
  make bzImage
  .......spa

這些命令既長,又繁瑣。並且有時候容易輸錯,浪費你的時間和精力。若是把這些命令作成一個文件,讓它自動按順序執行,對於須要屢次反覆編譯核心的用戶來講,會很方便。用 source 命令能夠辦到這一點。它的做用就是把一個文件的內容當成是 shell 來執行。進程

例如,先在 /usr/src/linux-2.4.20 目錄下創建一個文件,取名爲 make_command:ip

  在其中輸入以下內容:編譯

  make mrproper &&
  make menucon** &&
  make dep &&
  make clean &&
  make bzImage &&
  make modules &&
  make modules_install &&
  cp arch/i386/boot/bzImge /boot/vmlinuz_new &&
  cp System.map /boot &&
  vi /etc/lilo.conf &&
  lilo -v登錄

文件創建好以後,之後每次編譯核心,只須要在 /usr/src/linux-2.4.20 下輸入
source make_command變量

就好了。這個文件也徹底能夠作成腳本,只需稍加改動便可。這裏主要是讓你們理解 source 的用法。若是你用的不是 lilo 來引導系統,能夠把最後兩句話去掉。配置你本身的引導程序來引導新內核。

shell 編程中的命令有時和 C 語言是同樣的。&& 表示與,|| 表示或。把兩個命令用 &&  接起來,如 make mrproper && make menucon** ,表示要第一個命令執行成功才能執行第二個命令。對執行順序有要求的命令能保證一旦有錯誤發生,下面的命令不會盲目地繼續執行。

運行以下命令./set_env.sh設置相關環境變量時發現:當此命令運行結束後,腳本中所設置的環境變量仍爲空,感受此腳本沒有執行;運行. set_env.sh腳本執行成功。經過上網查詢,發現是因爲source命令與shell scripts的做用範圍不一樣而致使的。

source命令與shell scripts的區別:
source在當前bash環境下執行命令,而scripts是啓動一個子shell來執行命令。這樣若是把設置環境變量(或alias等等)的命令寫進scripts中,就只會影響子shell,沒法改變當前的BASH,因此經過文件(命令列)設置環境變量時,要用source 命令。

 

source命令的做用就是用來執行一個腳本,那麼:source a.sh 同直接執行 ./a.sh 有什麼不一樣呢,好比你在一個腳本里export $KKK=111 ,若是你用./a.sh執行該腳本,執行完畢後,你運行 echo $KKK ,發現沒有值,若是你用source來執行 ,而後再echo ,就會發現KKK=111。由於調用./a.sh來執行shell是在一個子shell裏運行的,因此執行後,結構並無反應到父shell裏,可是source不一樣它就是在本shell中執行的,因此能夠看到結果

相關文章
相關標籤/搜索