首頁>Club>
47
回覆列表
  • 1 # 產品經理老胡

    老胡的看法:

    有區別!使用source和./執行指令碼不但有區別,區別還挺大。老胡平時使用linux的bash比較多,單就bash的情況說說吧。使用source命令執行指令碼的時候,是在當前的shell程序中執行的,可以使用和修改當前shell的所有變數;使用./執行指令碼的時候,是另外建立了一個新的shell程序,指令碼在這個新的程序中執行。

    瞭解一下source和./

    1、source和.(注意不是./)

    source是bash的一個內建命令(zsh也有這個命令),它的用法是:

    source 檔名

    source的作用是在當前shell環境中從指令碼檔案中讀取並執行命令,返回執行的最後一個命令的退出狀態 。指令碼檔案不需要具備可執行許可權。

    .命令和source命令等價,是source的別名。

    2、./的含義

    ./其實並不是命令,它就是它本身的含義:當前目錄。

    以./script這樣的方式執行指令碼的時候,./的作用實際上就是指定了指令碼檔案所在的目錄。

    ./script

    bash ./script

    sh ./script

    如果指令碼是bash指令碼(指令碼開頭的sha-bang指定的是/bin/bash作為shell直譯器),則它們三個是等價的。

    當“./”代表的目錄存在於$PATH之中時,則可以省略直接執行script。

    使用bash和sh執行指令碼的時候不需要指令碼具有可執行許可權,以命令方式執行指令碼檔案的時候需要可執行許可權。

    例項演示source和./執行指令碼的區別

    下面用兩個例項來演示一下source和./執行指令碼的區別

    我先在shell裡定義一個變數(不匯出環境變數),然後分別用source和./執行的方式執行讀取和修改這個變數的指令碼。

    指令碼script的內容:

    ./執行的結果:

    source執行的結果:

    總結一下,source是在當前shell環境下逐條執行指令碼中的語句,會對當前shell環境產生影響;./直接執行是根據指令碼中#!指定的shell來執行接下來的每條命令;bash和sh是使用bash shell逐條執行指令碼中的命令。它們都是在子shell中執行,不會對當前shell環境產生影響。

  • 2 # 可樂土豆

    source 以及 . 直接在當前的程序中讀取指令碼的配置,不會開一個新的程序!

    source會將指令碼的內容直接影響到父程序的(因為它不開闢新執行緒,可以說是直接在當前程序中加入指令碼的執行內容)。所以你source之後,裡面配置的變數都會加入到當前環境中,你可以在該shell中呼叫指令碼中的變數!

    而./xx.sh 以及 sh

    xx.sh

    是在當前程序下新開一個子shell程序執行這個指令碼,當指令碼執行完畢了,sh中設定的變數和子程序一起被銷燬了!(該子shell繼承了父程序的shell的環境變數,子shell結束了變數將被銷燬,如果使用了export可以將子shell的變數反饋到父級別的shell中)

  • 中秋節和大豐收的關聯?
  • 年味越來越淡和西洋節入侵有沒有關係?