linux shell指令碼中點號和source命令
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命令 根據網上資源整理 2011 06 14 keywords shell 指令碼source linux linux 中乙個檔案是根據其是否具有執行屬性來判斷他是否可以直接執行的。就像 windows 下的exe 一樣。如果我們要執行某乙個檔案,可以...
LINUX Shell指令碼中點號和source命令
linux中乙個檔案是根據其是否具有執行屬性來判斷他是否可以直接執行的。就像windows下的exe一樣 如果我們要執行某乙個檔案,可以先將其許可權修改為可執行 必須是所有者或者root才能修改 然後 通過用sh來執行該指令碼或者.指令碼名。但有時候我們並不想修改檔案許可權,可能我們也沒有那個許可權...
LINUX Shell指令碼中點號和source命令
linux shell指令碼中點號和source命令 根據網上資源整理 2011 06 14 keywords shell指令碼source linux linux中乙個檔案是根據其是否具有執行屬性來判斷他是否可以直接執行的。就像windows下的exe一樣。如果我們要執行某乙個檔案,可以先將其許可...