linux shell指令碼中點號和source命令
根據網上資源整理(2011/06/14)
keywords: shell
指令碼source linux
linux
中乙個檔案是根據其是否具有執行屬性來判斷他是否可以直接執行的。就像
windows
下的exe
一樣。如果我們要執行某乙個檔案,可以先將其許可權修改為可執行
(必須是所有者或者
root
才能修改
)。然後,通過用
sh來執行該指令碼或者
./指令碼名。
但有時候我們並不想修改檔案許可權,可能我們也沒有那個許可權,所以我們可以使用
.(點號
)+檔名來臨時執行乙個指令碼而無須修改許可權。
在linux
系統中存在大量的指令碼,其中你會看到大量這個用
source命令(
從c shell 而來)
執行bash shell
的內建命令。點命令,就是個點符號(從
bourne shell而來)
是source
的另一名稱。同樣的,當前指令碼中配置的變數也將作為指令碼的環境,
source(或點)
命令通常用於重新執行剛修改的初始化文件,如
.bash_profile
和.profile
等等。例如,假如在登入後,對
.bash_profile
中的editer
和term
變數做了修改,則能夠用
source
命令重新執行
.bash_profile
中的命令而不用登出並重新登入。
source
命令的作用就是用來執行乙個指令碼,那麼:
source a.sh
同直接執行
./a.sh
有什麼不同呢?比如您在乙個指令碼裡
export $kkk=111
,假如您用
./a.sh
執行該指令碼,執行完畢後,您執行
echo $kkk
,發現沒有值,假如您用
source
來執行,然後再
echo ,
就會發現
kkk=111
。因為呼叫
./a.sh
來執行shell
是在乙個子
shell
裡執行的,所以執行後,結果並沒有反應到父
shell
裡,但是
source
不同他就是在本
shell
中執行的,所以能夠看到結果。
經典問題:
///shell
指令碼(test.sh)
如下:#!/bin/sh
echo "export monitor=1" >> /etc/profile
source /etc/profile
呼叫後(./test.sh)
,執行echo $monitor,
沒有輸出任何值
手動source /etc/profile
後,再次執行
echo $monitor
,輸出了預期的值
可見指令碼中的
source /etc/profile
沒有成功
(提法本身就是錯誤的),請問這個應該怎麼解決?
///a
:在執行
test.sh
的時候,不用
./test.sh
用source test.sh
Linux Shell指令碼中點號和source命令
linux shell指令碼中點號和source命令 linux中乙個檔案是根據其是否具有執行屬性來判斷他是否可以直接執行的。就像windows下的exe一樣。如果我們要執行某乙個檔案,可以先將其許可權修改為可執行 必須是所有者或者root才能修改 然後,通過用sh來執行該指令碼或者.指令碼名。但有...
LINUX Shell指令碼中點號和source命令
linux中乙個檔案是根據其是否具有執行屬性來判斷他是否可以直接執行的。就像windows下的exe一樣 如果我們要執行某乙個檔案,可以先將其許可權修改為可執行 必須是所有者或者root才能修改 然後 通過用sh來執行該指令碼或者.指令碼名。但有時候我們並不想修改檔案許可權,可能我們也沒有那個許可權...
LINUX Shell指令碼中點號和source命令
linux shell指令碼中點號和source命令 根據網上資源整理 2011 06 14 keywords shell指令碼source linux linux中乙個檔案是根據其是否具有執行屬性來判斷他是否可以直接執行的。就像windows下的exe一樣。如果我們要執行某乙個檔案,可以先將其許可...