为什么要使用$ PATH,它是什么

时间:2014-09-20 14:07:58

标签: path terminal

我对编程很新(不是真的,但我还在学习 - 不是我们所有人吗?)。虽然我知道Java和Python,并且知道C,C ++,JS,C#,HTML,CSS等(并且我可以在终端中很好地导航),但我不熟悉终端中$ PATH的内容。 / p>

我比以前更频繁地使用Linux终端和Mac终端(如果我两年前都做过),我知道对于python,它希望你“导出”它的路径,如{ {1}}。但是,我甚至都不知道它的作用。我试图找出答案,但我能找到的只是人们说“导出这条路并导出那条路径。”

那么,它是什么以及为什么要使用它?我理解(如果你是为Python做的),它基本上使'python'(或'python2'或'python3')变量,但我只是不明白它的概念。

1 个答案:

答案 0 :(得分:3)

man bash将其描述为:

  

<强> PATH

     
    

命令的搜索路径。这是一个以冒号分隔的列表                   shell查找命令的目录(请参阅命令                   执行如下)。中的零长度(null)目录名称                   值PATH表示当前目录。一个空目录                   名称可能显示为两个相邻的冒号,或作为初始或                   尾随结肠。默认路径是系统相关的,并且是                   由安装bash的管理员设置。一个共同的价值是                   /usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin'

  

当您运行命令(如python)时,操作系统会尝试在python中存储的目录列表中查找PATH程序。

假设您的PATH/usr/local/bin:/foo:/bar:/baz:/usr/bin。当您尝试运行python comamnd时,操作系统将按顺序在这些目录中查找名为python的可执行文件。在Linux上,您可以使用strace命令观察它:

$ 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

只要在python中找到/usr/bin/python,搜索就会停止,程序就会运行。