$ PATH优于别名

时间:2013-02-17 04:20:23

标签: linux shell unix

我对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)创建符号链接(符号链接):

ln -s /Library/Frameworks/Python.framework/Versions/3.3/bin /usr/local/bin

你会说(根据你的经验)是“推荐”的方式吗?

4 个答案:

答案 0 :(得分:7)

在您的路径中放置python3是在文件系统中找到自己的任何位置调用它的正确方法。符号链接是将该命令更改为python并保持脚本不依赖于版本的最佳方法(您可以运行依赖于python的脚本使用符号链接和需要python 3.0的脚本专门使用python3,甚至虽然在你的电脑上他们是一样的东西)。符号链接仍然是文件系统中的文件,因此它们仍然需要在您的路径中。

我只看到当您尝试创建某种行为时使用的别名,这种行为与命令行实用程序的默认行为不同,例如ls的别名,它会静默添加。

此外,符号链接也存储在文件系统中,因此一旦创建,它们就会存在于所有其他登录用户,而别名仅适用于已定义它们的登录用户。他们还可以应用文件权限。

以下a fun article是关于您可以通过.bash_profile向终端执行的操作,包括一些很棒的别名。

答案 1 :(得分:4)

首先,没有理由在/Library/Frameworks/目录中安装Python。我的建议是(至少对初学者而言)你不应该像你的/Library那样添加顶级目录。如果您从源代码编译它,您应该built it标准为./configure(它可能会进入/usr/local/

我不太了解从源代码编译Python,但大多数Linux源代码默认情况下./configure - d到/usr/local/前缀,所以他们的二进制文件进入/usr/local/bin/默认情况下,您的PATH

通常已经默认使用

某些Linux发行版有一个/etc/profile,间接地,如果目录$HOME/bin/存在,则将其添加到PATH;在这种情况下,只需添加二进制文件和脚本(或符号链接),这是最简单的方法。

我的一般建议是避免使用非常长或非常具体的PATH。特别是,在PATH内为每个产品添加目录是恕我直言,这是一个错误。参见例如directory-variables section of GNU coding standards,并保持PATH很短。我个人只在/usr/local/bin/(系统范围)或$HOME/bin/中添加程序,可能作为符号链接(因此我不会更改我的PATH,因为它已包含/usr/local/bin/ }和$HOME/bin)。

根据过去的经验,有一段很长的PATH是一场噩梦,会减慢你的互动炮弹

答案 2 :(得分:0)

如果您使用不同版本的Python,我建议您选择别名,以便更容易发生冲突。 shell将查找PATH变量,并且只要它与Python的可执行文件匹配,它就会执行它。别名必须放在您的shell配置文件中,如.bash_profile

答案 3 :(得分:0)

谢谢大家的解释。

正如我已经说过的,我对Unix和Linux都很陌生。我刚刚为我的博客写了一篇关于其他“新手”的文章(别名,符号链接$ PATH)。我喜欢写这些东西,因为他们真的很感兴趣,我想分享我的经历 - 我希望他们也对其他人有所帮助。此外,如果我必须解释事情,它有助于我加深理解 - 这也是一个很好的未来参考!

如果你能快速浏览一下这篇文章会很好,如果我有些不对劲,我会对建议感到高兴!

http://scientific-ocean.com/2013/02/17/an-introduction-to-linuxunix-executables-path-aliases-and-symlinks/