2014-09-20 52 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

相关问题