我对Linux和Unix比较陌生。在互联网的帮助下,我终于弄清楚了$PATH
和.bashrc
中的别名是如何工作的。
但我真的找不到任何描述何时使用哪个的东西。
假设我在Library/Frameworks中安装了Python3.3,可执行文件是/Library/Frameworks/Python.framework/Versions/3.3/bin/python3
,但我想通过在终端中键入python3
来执行python 3.3。
当我正确理解它时,(至少)有三种方法可以实现这一点:
1) 我在.bashrc:中修改$PATH
export PATH=/Library/Frameworks/Python.framework/Versions/3.3/bin:${PATH}
2) 我在.bashrc:中设置了一个别名
alias python3=/Library/Frameworks/Python.framework/Versions/3.3/bin
3) 创建符号链接(symlink):
ln -s /Library/Frameworks/Python.framework/Versions/3.3/bin /usr/local/bin
你认为(根据你的经验)"推荐"的方式是什么?
将python3
放在路径中是在文件系统中任何位置调用它的正确方法。符号链接是将该命令更改为python
并使脚本不依赖于版本的最佳方式(您可以运行依赖于python的脚本使用符号链接,而需要python 3.0的脚本专门使用python3,即使在您的计算机上它们是一样的)。符号链接仍然是文件系统中的文件,因此它们仍然需要在您的路径中。
我只看到当你试图创建某种不同于命令行实用程序默认行为的行为时使用的别名,比如ls
的别名,它无声地添加了-a。
符号链接也存储在文件系统中,因此一旦创建,它们就存在于所有其他登录用户,而别名只适用于定义了它们的登录用户。他们还可以应用文件权限。
这是一篇有趣的文章,介绍了您可以通过.bash_profile
对终端进行的操作,其中包括一些很棒的别名。
首先,没有理由在/Library/Frameworks/
目录中安装Python。我的建议是(至少对于初学者来说)不应该添加像/Library
这样的顶级目录。如果您从源代码编译它,那么您应该使用标准的./configure
构建它(并且它可能会进入/usr/local/
)
我不太了解如何从源代码编译Python,但大多数Linux源代码默认情况下都会将./configure
-d作为/usr/local/
前缀,因此它们的二进制文件会进入/usr/local/bin/
,这通常在默认情况下已经存在于PATH
中
一些Linux发行版有一个/etc/profile
,如果目录$HOME/bin/
存在,它会间接地将其添加到PATH
中;在这种情况下,添加二进制文件和脚本(或符号链接)是最简单的方法。
我的一般建议是避免使用非常长或非常具体的PATH
。特别是,在PATH
中为每个产品添加一个目录是错误的。例如,请参阅GNU编码标准的目录变量部分,并保持PATH
的简短。就我个人而言,我只在/usr/local/bin/
(系统范围)或$HOME/bin/
中添加程序,可能是作为符号链接(所以我不会更改我的PATH
,因为它已经包含了/usr/local/bin/
和$HOME/bin
)。
根据过去的经验,拥有很长的PATH
是一场噩梦,会减慢你的交互式外壳
感谢大家的解释。
正如我已经说过的,我对Unix和Linux还很陌生。我刚刚为其他"新手"的博客写了一篇关于这些东西(别名、符号链接$PATH)的文章。我喜欢写这些事情,因为它们真的让我感兴趣,我想分享我的经历——我希望它们对其他人也有帮助。此外,如果我必须解释一些事情,这有助于我加深理解——这也是一个很好的未来参考!
如果你能很快浏览一下这篇文章,那就太好了,如果我做错了什么,我会很乐意提出建议!
http://scientific-ocean.com/2013/02/17/an-introduction-to-linuxunix-executables-path-aliases-and-symlinks/
我建议使用别名,如果使用不同版本的Python,会更容易发生冲突。shell会查找PATH变量,只要它与Python的可执行文件匹配,就会执行它。别名必须像.bash_profile
一样放在shell配置文件中。