2014-09-20 51 views
1

我對編程有點新鮮感(不是真的,但我仍然在學習 - 不是我們都是?)。雖然我知道Java和Python,並且知道C,C++,JS,C#,HTML,CSS等(我可以在終端中很好地導航),但我並不熟悉終端中的$ PATH。

我一直在比以前更頻繁地使用Linux終端和Mac終端(如果我甚至在兩年前完成),並且我知道python,它希望你「導出」它的路徑PATH=\path\to\python\bin:${PATH}\ export PATH。但是,我甚至不知道它的作用。我試圖找出,但我能找到的所有人都說「出口這條路,並出口那一條」。

那麼,它是什麼,爲什麼使用它?我明白(如果你是用Python做的話),它基本上把'python'(或'python2'或'python3')變成一個變量,但我不明白它是什麼概念。

回答

3

man bash將其描述爲:

PATH

的命令搜索路徑。它是一個以冒號分隔的 目錄列表,其中shell查找命令(請參閱下面的命令 執行)。 的 值中的零長度(空)目錄名錶示當前目錄。名稱可能會顯示爲兩個相鄰的冒號,或者作爲初始或尾部冒號顯示爲 。默認路徑取決於系統,並且由安裝bash的管理員設置爲 。常見的值是 /usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin'

當你運行一個命令,像python,操作系統試圖找到存儲在PATH目錄列表中python程序。

假設你的PATH/usr/local/bin:/foo:/bar:/baz:/usr/bin。當您嘗試運行python comamnd時,操作系統將按順序在這些目錄中查找名爲python的可執行文件。在Linux上,你可以看到它與strace命令做到這一點:只要python/usr/bin/python發現

$ PATH=/usr/local/bin:/foo:/bar:/baz:/usr/bin strace -f /bin/bash -c 'python --version' 2>&1 | grep 'stat.*python' 
stat("/usr/local/bin/python", 0x7fff98b63d00) = -1 ENOENT (No such file or directory) 
stat("/foo/python", 0x7fff98b63d00)  = -1 ENOENT (No such file or directory) 
stat("/bar/python", 0x7fff98b63d00)  = -1 ENOENT (No such file or directory) 
stat("/baz/python", 0x7fff98b63d00)  = -1 ENOENT (No such file or directory) 
stat("/usr/bin/python", {st_mode=S_IFREG|0755, st_size=4864, ...}) = 0 

,搜索停止,程序運行。

+0

很酷。謝謝;我不知道該怎麼辦...我猜這是因爲它在bash之下(順便說一下,請確保你更新了:))bash的安全問題) – dylnmc 2014-09-26 02:03:11

相關問題