source命令與“.”點(diǎn)命令_第1頁
source命令與“.”點(diǎn)命令_第2頁
source命令與“.”點(diǎn)命令_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、source命令與“.”點(diǎn)命令source命令是 bash shell的內(nèi)置命令,從C Shell而來。source命令的另一種寫法是點(diǎn)符號(hào),用法和source相同,從Bourne Shell而來。source命令可以強(qiáng)行讓一個(gè)腳本去立即影響當(dāng)前的環(huán)境。source命令會(huì)強(qiáng)制執(zhí)行腳本中的全部命令,而忽略文件的權(quán)限。source命令通常用于重新執(zhí)行剛修改的初始化文件,如.bash_profile和.profile等等。source命令可以影響執(zhí)行腳本的父shell的環(huán)境,而export則只能影響其 子shell的環(huán)境。使用方法舉例:$source /.bashrc或者:$. /.bashrc執(zhí)行

2、后/.bashrc中的內(nèi)容立即生效。一個(gè)典型的用處是,在使用An droid的mm等相關(guān)命令時(shí),需要先執(zhí)行以下命令:$cd <an droid source path>$source ./build/e nvsetup.sh或者 $. ./build/e nvsetup.shsource命令(從 C Shell而來)是bash shell的內(nèi)置命令。點(diǎn)命令,就是個(gè)點(diǎn)符號(hào),(從BourneShell而來)是source的另一名稱。同樣的,當(dāng)前腳本中設(shè)置的變量也將作為腳本的環(huán)境,source(或點(diǎn))命令通常用于重新執(zhí)行剛修改的初始化文件,女口 .bash profile禾口 .prof

3、ile 等等。例如,如果在登錄后對(duì) .bash_profile中的EDITER和TERM 變量做了修改,則能用source 命令重新執(zhí)行.bash_profile中的命令而不用注銷并重新登錄。source命令的作用就是用來執(zhí)行一個(gè)腳本,那么:source a.sh同直接執(zhí)行 ./a.sh有什么不同呢,比如你在一個(gè)腳本里export $KKK=111 ,如果你用./a.sh執(zhí)行該腳本,執(zhí)行完畢后,你運(yùn)行echo $KKK ,發(fā)現(xiàn)沒有值,如果你用source 來執(zhí)行,然后再echo就會(huì)發(fā)現(xiàn)KKK=111。因?yàn)檎{(diào)用./a.sh來執(zhí)行shell是在一個(gè)子shell里 運(yùn)行的,所以執(zhí)行后,結(jié)果并沒有反應(yīng)

4、到父shell里,不過source不同,他就是在本shell中執(zhí)行的,所以能看到結(jié)果。“.”點(diǎn)命令是shell的一個(gè)內(nèi)部命令,它從指定的 shell文件中讀入所有命令語句并在 當(dāng)前進(jìn)程中執(zhí)行。 因此當(dāng)多個(gè)shell進(jìn)程(父子進(jìn)程或無關(guān)進(jìn)程均可)共享一組變量值時(shí), 就可以將這些變量賦值語句定義到一個(gè)shell文件里,并在需要這些變量值的程序中使用點(diǎn)語句來引用這個(gè)shell文件,從而實(shí)現(xiàn)變量值共享(對(duì)這些變量值的修改僅涉及到這個(gè)shell文件)。但要注意的是,這個(gè) shell文件不能包括含有位置參數(shù)的語句,即不能接受$1、$ 2等命令行參數(shù)。從上面可以看出,其實(shí)點(diǎn)命令相當(dāng)于c語言里面的#inclu

5、de。點(diǎn)命令還有另一個(gè)寫法:source。下面我們將舉例來說明。我們先寫一個(gè)簡(jiǎn)單的 shell腳本文件,暫且命名為filel吧:#! /bin/basha="hi"echo $a我們先來執(zhí)行一下這個(gè)shell腳本,打開終端,敲入: ./filel結(jié)果是什么,你應(yīng)該也看到了吧:bash: ./filel: Permissi on denied為什么呢。我們先不管這個(gè)吧,先看一下,另一個(gè)結(jié)果:./filel (注意啊,兩個(gè)點(diǎn)之間有個(gè)空格的哦,要不就成了上一級(jí)目錄了,如果你不嫌麻 煩的話,也可以寫 source ./filel)這個(gè)的結(jié)果呢,跟前面就不一樣了,正如我們所愿的, 輸

6、出了 hi。./filel,直接執(zhí)行,需要 另起shell進(jìn)程,而你似乎還沒有這個(gè)權(quán)限(這個(gè)改一下就0K了,后面再說),而用點(diǎn)命令就不一樣了(注意啊,./file這里的點(diǎn)可不是點(diǎn)命令里的點(diǎn)啊,我就被這個(gè)問題困擾了很久,汗死,竟然忘了點(diǎn)還有當(dāng)前目錄的意思,大家b4我吧),點(diǎn)命令會(huì)在當(dāng)前的shell下執(zhí)行。補(bǔ)充說一下怎么改一下file1的權(quán)限,讓我們可以在按shell腳本來執(zhí)行:chmod +x file1再執(zhí)行一下./file1,是不是OK 了?再來看另一個(gè)例子吧。首先腳本文件file1#! /bin/basha="hi"腳本文件file2 (與file1在同一個(gè)目錄下)#!

7、 /bin/bash./file1echo $a記得改一下file1的權(quán)限啊,要不./file1就沒法執(zhí)行了。執(zhí)行一下看看結(jié)果。什么都沒有, 是吧。我們?cè)俑囊幌?file2,這回用一下咱們的點(diǎn)命令#! /bi n/bash./filelecho $a怎么樣結(jié)果不一樣了吧。(原諒我實(shí)在太懶了,只能舉這么簡(jiǎn)短的例子了,呵呵)。這個(gè)例子應(yīng)該還是能說明點(diǎn)問題的吧。如果不用點(diǎn)命令的話,會(huì)另起shell進(jìn)程,而啟動(dòng)這個(gè)進(jìn)行的時(shí)候,它會(huì)建立自己的進(jìn)程環(huán)境(暫且這么叫它吧),然后在這個(gè)進(jìn)行結(jié)束的時(shí)候,它所建立的環(huán)境也隨之被銷毀。而且點(diǎn)命令就不一樣了,它會(huì)把點(diǎn)命令所帶的shell腳本里的所以內(nèi)容帶到當(dāng)前的 sh

8、ell進(jìn)程里,在本程序里,就是變量a 了。廢話了這么多,其實(shí)好像把點(diǎn)命令想像成C里的#inelude就OK 了,呵呵。不過經(jīng)過這么折騰,還是學(xué)到了一點(diǎn)東西的,至少知道了不僅有點(diǎn)命令的作用,更有當(dāng)前目錄的意思(冷啊,該補(bǔ)一下linux基礎(chǔ)了)。為什么在shell腳本里面export的環(huán)境變量,在 set里面竟然看不到。為什么在shell腳本里面用export設(shè)置環(huán)境變量之后,當(dāng)shell執(zhí)行完了,用set命令看不到呢?但是你如果直接在終端里export環(huán)境變量用set是看到的。一個(gè)shell腳本test.sh的內(nèi)容為:#!/bi n/bashexport AA=123當(dāng)我們執(zhí)行test.sh的時(shí)

9、候,是當(dāng)前終端所在的shell fork 個(gè)子shell然后執(zhí)行test.sh的, 執(zhí)行完了再返回終端所在的shell。明白這點(diǎn),就容易理解了,我們?cè)?test.sh設(shè)置了 AA環(huán)境變量,它只在fork出來的這個(gè)子shell中生效,子shell只能繼承父shell的環(huán)境變量,而 不能修改父shell的環(huán)境變量,所以test.sh結(jié)束后,父進(jìn)程的環(huán)境就覆蓋回去。所以在test.sh之后完之后,我們用set命令是看不了 AA這個(gè)環(huán)境變量的值的。那有什么辦法可以讓腳本的環(huán)境變量在腳本執(zhí)行之后仍然對(duì)當(dāng)前終端存在呢?用sorcue或者.(dot)。明確告訴 shell不要fork執(zhí)行腳本,而是在當(dāng)前的shell執(zhí)行,這樣環(huán)境變量就可以保存下來了。source命令用法:source File name (通常用“.”來代替)source test.sh 與 .test.sh 是等效的?!狙a(bǔ)充】source命令與shell scri

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論