2012-09-16 51 views
1

要激活的TurboGears的virtualenv(就像一個例子),你這樣做:方式調用UNIX shell腳本( 「」, 「源」)

. bin/activate 

或者這樣:

source bin/activate 
  1. 爲什麼當前目錄「。」作爲一個命令工作?

  2. 爲什麼要使用「源」或「。」在所有?爲什麼不簡單地「bin /激活」?

(我做了一個小網站搜索此,而是「」和‘源’得到了很多不好的命中)。

+0

嗯...我問了一個關於標準編程工具的具體技術問題。問題引用代碼,並且回覆也引用代碼。我一直在研究常見問題解答,但我不明白:關鍵問題的問題在哪裏?它會更適合在服務器故障或Unix論壇? –

+0

http://stackoverflow.com和http://unix.stackexchange.com之間存在模糊的界限。 Shell腳本可以被認爲是編程,但它也可以被認爲是特定於Unix操作環境的。 –

回答

6
  1. .不意味着‘當前目錄’上下文。這只是source的簡寫。
  2. 採購的腳本(使用.source)運行在您的當前外殼上下文的腳本,而不是啓動一個子shell。這意味着它可以修改當前shell的環境。簡單地運行一個腳本不能做到這一點。例如:

    $ cat script 
    VARIABLE=something 
    $ echo $VARIABLE 
    
    $ ./script 
    $ echo $VARIABLE 
    
    $ . ./script 
    $ echo $VARIABLE 
    something 
    
+0

「CWD」(當前工作目錄)受到同樣的影響。 –

+0

我認爲@JeremyJStarcher得到的是'CD'必須是shell內置的,而不是外部可執行文件,原因完全相同。 –

+0

我反對:''源''是''''的好幫手! '.'命令會在'source'命令的前面加上空格。在'非C shell'系列中,'source'是最近的一個新增功能;它現在還不在POSIX shell中,儘管'.'是。 (_請注意:_這意味着有趣/教育,而不是對任何事情的嚴肅批評。) –

2

你可以使用另外一個原因 「」或「source」來執行腳本時,如果相關腳本不以「#!/ bin/bash」(shebang)開頭,它會告訴shell哪個程序應該解釋有問題的腳本。

+0

但是隻有當你想在你當前的shell環境中運行腳本。如果你想用特定的shell運行它,你可以使用'bash myscript'或'sh myscript'或'csh myscript'等。 –