關於Shell的source、點(.)和export

  整理自網絡多個來源。shell

一、source與點命令,功能相同,來源不一樣。bash

source 命令是 bash shell 的內置命令,從 C Shell 而來。
source 命令的另外一種寫法是點符號,用法和 source 相同,從Bourne Shell而來。

二、shell腳本執行方法網絡

  有兩種方法執行shell scripts,一種是新產生一個shell,而後執行相應的shell scripts;一種是在當前shell下執行,再也不啓用其餘shell。ide

  新產生一個shell而後再執行scripts的方法是在scripts文件開頭加入語句:#!/bin/sh。通常的script文件(.sh)便是這種用法。這種方法先啓用新的sub-shell(新的子進程),而後在其下執行命令。繼承

  另一種方法就是上面說過的source命令,再也不產生新的shell,而在當前shell下執行一切命令。在 bash下輸入man source,找到source命令解釋處,能夠看到解釋"Read and execute commands from filename in the current shell environment and ..."。從中能夠知道,source命令是在當前進程中執行參數文件中的各個命令,而不是另起子進程(或sub-shell)。進程

三、關於source命令。ip

source 命令能夠強行讓一個腳本去當即影響當前的環境。
source 命令會強制執行腳本中的所有命令,而忽略文件的權限。
source 命令一般用於從新執行剛修改的初始化文件,如 .bash_profile 和 .profile 等等。

四、關於export命令。it

  export和source實際上是兩個徹底不一樣的命令。export通常解釋是「設置或顯示環境變量」。這在功能上說沒錯,可是爲何要用「導出」這個單詞呢?class

  這是由於在子 shell(參見第2點)中定義的變量只在該子shell內有效。若是在一個shell腳本程序中定義了一個變量,當該腳本程序運行時,這個定義的變量只是該腳本程序內的一個局部變量,其餘的shell不能引用它,要使某個變量的值能夠在其餘shell中被改變,可使用export命令對已定義的變量進行輸出。 export命令將使系統在建立每個新的shell時定義這個變量的一個拷貝。這個過程稱之爲變量輸出。變量

五、source filename 與 sh filename 及./filename執行腳本的區別。

(1)、當shell腳本具備可執行權限時,用sh filename與./filename執行腳本是沒有區別的。 ./filename是由於當前目錄沒有在PATH中,全部"."是用來表示當前目錄的。

(2)、sh filename 從新創建一個子shell,在子shell中執行腳本里面的語句,該子shell繼承父shell的環境變量,但子shell新建的、改變的變量不會被帶回父shell,除非使用export。

(3)、source filename:這個命令其實只是簡單地讀取腳本里面的語句依次在當前shell裏面執行,沒有創建新的子shell。那麼腳本里面全部新建、改變變量的語句都會保存在當前shell裏面。


*** walker ***

相關文章
相關標籤/搜索