2012-01-26 123 views
4

什麼樣#。/和#之間的區別。 ./

# ./test 

# . ./test 

測試執行腳本之間的差異,例如

#!/bin/bash 
export OWNER_NAME="ANGEL 12" 
export ALIAS="angelique" 

簡單的腳本,我知道結果,但即時通訊不能確定到底發生了什麼

謝謝

+0

我不知道你可以做#。 ./blah。好的提示。 :) – vhallac

+0

怎麼樣? '#'應該是一個評論,背後的一切都應該被忽略!除了文件開頭的'#!'外。 – TMS

回答

7

./foo執行foo如果它被標記爲可執行文件且具有合適的shebang行(或者是ELF二進制文件)。它將在一個新的過程中執行。

. ./foo. foo加載在當前外殼腳本。它等於source foo

在示例代碼中,如果希望導出的變量在shell中可用,則需要使用第二種方法。

+0

爲什麼不在第一個場景中導出環境變量..?即時通訊仍然困惑.. – user1127747

+0

@ user1127747:看到的問題[一個shell腳本可以設置調用shell的環境變量?](http://stackoverflow.com/questions/496702/can-a-shell-script-set-environment - 調用shell的變量)作爲答案。 – DarkDust

+1

@ user1127747:由於腳本在其自己的進程中運行,因此無法將*回*導出到其父環境。這不僅僅是環境變量的工作原理。通過源代碼(孤立點),您可以保留在shell的進程中,因此可以自由地更改其環境。 – unwind

2

僅使用點,bash就是「採購」指定文件。它等同於內建的source,並嘗試在同一個shell進程中包含並執行腳本。

./啓動一個新進程,並且當前shell進程等待它終止。

+3

'。/'表示*在當前目錄*中。它是一個文件路徑元素,而不是bash語法元素,不會產生子shell。 – DarkDust

+0

@DarkDust:這可能是不準確的,我只是想概括一下調用腳本而不用源代碼的情況。 –

0

第一個暗示腳本(或二進制)是可執行的。用腳本(可能)包含一個shebang行來告訴使用哪個解釋器。

第二個是「執行[參數]作爲shell腳本」的縮寫。作爲參數傳遞的文件不需要設置可執行位。

相關問題