LINUX Shell指令碼中點號和source命令

2021-05-26 04:32:06 字數 1895 閱讀 6148

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一樣。如果我們要執行某乙個檔案,可以先將其許可...