source命令linux
① linux中source命令的使用方式
source 命令 是一個內置的 shell 命令 ,用於從當前shell會話中的文件讀取和執行命令。source命令通常用於保留、更改當前shell中的環境變數。簡而言之,source一個 腳本 ,將會在當前shell中運行execute命令。
source命令可用於:
刷新當前的shell環境
在當前環境使用source執行Shell 腳本
從腳本中導入環境中一個Shell函數
從另一個Shell腳本中讀取變數
source命令的語法
source命令它需要一個文件,如果提供了參數,那麼將用作傳遞腳本的位置參數。
source FILENAME [ARGUMENTS]
也可以使用.替代source命令:
. FILENAME [ARGUMENTS]
如何使用source命令
1. 刷新當前的shell環境
可以在當前的shell環境中定義一個別名。為ls -al定義一個別名為ll:
[root@localhost ~]# echo "alias ll='ls -al'" >> ~/.bashrc
在~/.bashrc文件中定義完別名,可以使用source命令刷新當前shell環境:
[root@localhost ~]# source ~/.bashrc
現在可以使用ll別名列出當前目錄里所有文件了,包括隱藏文件。
2. 在當前環境使用source執行Shell腳本
Shell腳本不知道螞首你在當前Shell環境中定義的變數。source命令可用於在當前會話中執行你的Shell腳本。
下面在定義一個變數:
[root@localhost ~]# website=https://www. linux probe.com
創建一個腳本:
[root@localhost ~]# vim web.sh
#!/bin/bash
echo $website
使用source在當前shell會話中執悶仿數行它:
[root@localhost ~]# source web.shhttps://www.linuxprobe.com
當使用sh運行腳本時,找不到環境中定義的變數:
3. 從腳本中導入環境中一個Shell函數
首先創建一個腳本,定義一個函數:
[root@localhost ~]# vim func.sh
#!/bin/bash
foo(){
echo "test function!"
}
要在當前的shell會話中導入上述腳本的功能,使用下面命令:
[root@localhost ~]# source func.sh
下面在終端中執行以下func.sh腳本中的foo函數試試:
[root@localhost ~]# foo
test function!
source完腳本之後,可以看到在當前回話的終端中可以執行腳本裡面的函數。
4. 從另一個Shell腳本中讀取變數
首先創建帶有一些變數的shell腳本,請輸入:
[root@localhost ~]# vim var.sh
#!/bin/bash
a=1
b=2
c=3
再創大歲建一個腳本,該腳本讀取上一個腳本var.sh中的變數:
[root@localhost ~]# vim read.sh
#!/bin/bash
source ~/var.sh
echo $a
echo $b
echo $c
在腳本中首先使用source將var.sh中的變數到處到當前回話,然後echo顯示變數值。下面執行read.sh看一下:
5. 讀取並執行命令
source命令可以從文件讀取和執行命令。下面的一個文本文件中帶有兩個命令,使用source命令運行該文件,看看是否會執行裡面的命令。
下面創建一個文件cmd.txt,保存兩個命令:
[root@localhost ~]# cat cmd.txt
ip ad
date
下面使用source執行這個文件:
[root@localhost ~]# source cmd.txt
總結
source命令在當前shell中執行腳本,而exec命令在新的shell中運行。
② linux下的Source命令的基本功能
source命令用法:source FileName
作用:在當前bash環境下讀取並執行FileName中的命令。
註:該命令通常用命令".」來替代。
使用範例:
1、source filename
2、. filename#(中間有空格)
source命令(從 C Shell 而來)是bash shell的內置命令。點命令,就是個點符號,(從Bourne Shell而來)是source的另一名稱。
同樣的,當前腳本中配置的變數也將作為腳本的環境,source(或點)命令通常用於重新執行剛修改的初始化文檔,如 .bash_profile 和 .profile 等等。
例如,假如在登錄後對 .bash_profile 中的 EDITER 和 TERM 變數做了修改,則能夠用source命令重新執行 .bash_profile 中的命令而不用注銷並重新登錄。
比如在一個腳本里export $KKK=111,假如用./a.sh執行該腳本,執行完畢後,運行echo $KKK,發現沒有值,假如用source來執行 ,然後再echo,就會發現KKK=111。
因為調用./a.sh來執行shell是在一個子shell里運行的,所以執行後,結構並沒有反應到父shell里,但是source不同他就是在本shell中執行的,所以能夠看到結果。
source命令(從 C Shell 而來)是bash shell的內置命令。點命令,就是一個點符號,(從Bourne Shell而來)是source的另一名稱。
這兩個命令都以一個腳本為參數,該腳本將作為當前shell的環境執行,即不會啟動一個新的子進程。所有在腳本中設置的變數將成為當前Shell的一部分。
文件建立好之後,以後每次編譯核心,只需要在/usr/src/linux-2.4.20下輸入source make_command就行了。這個文件也完全可以做成腳本,只需稍加改動即可。
shell編程中的命令有時和C語言是一樣的。&&表示與,||表示或。把兩個命令用&&聯接起來,如make mrproper && make menuconfig,表示要第一個命令執行成功才能執行第二個命令。
對執行順序有要求的命令能保證一旦有錯誤發生,下面的命令不會盲目地繼續執行。
③ linux涓璼ource鍛戒護璇﹁В
linux緋葷粺涓璼ource鍛戒護鐢ㄤ簬閲嶆柊鎵ц屽垰淇鏀圭殑鍒濆嬪寲鏂囦歡錛屼嬌涔嬬珛鍗崇敓鏁堬紝鑰屼笉蹇呮敞閿騫墮噸鏂扮櫥褰曘備笅闈㈡槸source鍛戒護鍐呭圭殑鍏蜂綋浠嬬粛錛
1銆乻ource鍛戒護綆浠嬶細
source鍛戒護涔熺О涓衡滅偣鍛戒護鈥濓紝涔熷氨鏄涓涓鐐圭﹀彿錛.錛夛紝鏄痓ash鐨勫唴閮ㄥ懡浠わ紝浣縎hell璇誨叆鎸囧畾鐨凷hell紼嬪簭鏂囦歡騫朵緷嬈℃墽琛屾枃浠朵腑鐨勬墍鏈夎鍙ワ紝鐢ㄤ簬閲嶆柊鎵ц屽垰淇鏀圭殑鍒濆嬪寲鏂囦歡錛屼嬌涔嬬珛鍗崇敓鏁堬紝鑰屼笉蹇呮敞閿騫墮噸鏂扮櫥褰曘
2銆佽娉曪細
source filename 鎴 . filename
3銆乻ource filename 涓 sh filename 鍙./filename鎵ц岃剼鏈鐨勫尯鍒錛
褰搒hell鑴氭湰鍏鋒湁鍙鎵ц屾潈闄愭椂錛岀敤sh filename涓./filename鎵ц岃剼鏈鏄娌℃湁鍖哄埆鐨勩./filename鏄鍥犱負褰撳墠鐩褰曟病鏈夊湪PATH涓錛屾墍鏈夆.鈥濇槸鐢ㄦ潵琛ㄧず褰撳墠鐩褰曠殑銆
sh filename 閲嶆柊寤虹珛涓涓瀛恠hell錛屽湪瀛恠hell涓鎵ц岃剼鏈閲岄潰鐨勮鍙ワ紝璇ュ瓙shell緇ф壙鐖秙hell鐨勭幆澧冨彉閲忥紝浣嗗瓙shell鏂板緩鐨勩佹敼鍙樼殑鍙橀噺涓嶄細琚甯﹀洖鐖秙hell錛岄櫎闈炰嬌鐢╡xport銆
source filename錛氳繖涓鍛戒護鍏跺疄鍙鏄綆鍗曞湴璇誨彇鑴氭湰閲岄潰鐨勮鍙ヤ緷嬈″湪褰撳墠shell閲岄潰鎵ц岋紝娌℃湁寤虹珛鏂扮殑瀛恠hell銆傞偅涔堣剼鏈閲岄潰鎵鏈夋柊寤恆佹敼鍙樺彉閲忕殑璇鍙ラ兘浼氫繚瀛樺湪褰撳墠shell閲岄潰銆
涓句緥錛
1.鏂板緩涓涓猼est.sh鑴氭湰錛屽唴瀹逛負:A=1
2.鐒跺悗浣垮叾鍙鎵ц宑hmod +x test.sh
3.榪愯宻h test.sh鍚庯紝echo $A錛屾樉紺轟負絀猴紝鍥犱負A=1騫舵湭浼犲洖緇欏綋鍓峴hell
4.榪愯./test.sh鍚庯紝涔熸槸涓鏍風殑鏁堟灉
5.榪愯宻ource test.sh 鎴栬 . test.sh錛岀劧鍚巈cho $A錛屽垯浼氭樉紺1錛岃存槑A=1鐨勫彉閲忓湪褰撳墠shell涓
④ linux中的source命令和直接執行腳本的區別
source 以及 . 直接在當前的進程中讀取腳本的配置,不會開一個新的進程!
source會將腳本的內容直接影響到父進程的(因為它不開辟新線程,可以說是直接在當前進程中加入腳本的執行內容)。所以你source之後,裡面配置的變數都會加入到當前環境中,你可以在該shell中調用腳本中的變數!
而./xx.sh 以及 sh xx.sh
是在當前進程下新開一個子shell進程運行這個腳本,當腳本運行完畢了,sh中設置的變數和子進程一起被銷毀了!(該子shell繼承了父進程的shell的環境變數,子shell結束了變數將被銷毀,如果使用了export可以將子shell的變數反饋到父級別的shell中)
⑤ linux中source這個命令放在那個文件夾下
source是/bin/bash的內建命令,不是linux命令所以在PATH裡面是找不到的。