6

我对 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

您会说什么(根据您的经验)是“推荐”的方式?

4

4 回答 4

7

放入python3路径是在文件系统中的任何位置调用它的正确方法。符号链接是将命令更改为python并使脚本不依赖于版本的最佳方法(您可以运行依赖于 python 的脚本使用符号链接和需要 python 3.0 的脚本特别使用 python3,即使在您的计算机上它们是一样的东西)。符号链接仍然是文件系统中的文件,因此它们仍然需要在您的路径中。

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

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

这是一篇有趣的文章,介绍了您可以通过.bash_profile包括一些很棒的别名对终端执行的操作。

于 2013-02-17T04:26:33.393 回答
4

首先,没有理由将 Python 安装在/Library/Frameworks/目录中。我的建议是(至少对于初学者来说)你不应该添加像你的/Library. 如果你从源代码编译它,你应该用标准构建它./configure(它可能进入/usr/local/

我不太了解从源代码编译 Python,但大多数 Linux 源代码默认./configure-d 到一个/usr/local/前缀,所以它们的二进制文件/usr/local/bin/通常已经默认在你的PATH

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

我的一般建议是避免使用非常长或非常具体的PATH. 特别是,在您PATH的每个产品中添加一个目录是恕我直言的错误。请参阅例如GNU 编码标准的目录变量部分,并保持PATH简短。就我个人而言,我只在/usr/local/bin/(系统范围内)或中添加程序$HOME/bin/,也许作为符号链接(所以我不改变我的PATH,因为它已经包含了/usr/local/bin/$HOME/bin)。

根据过去的经验,很长PATH是一场噩梦,会减慢你的交互式 shell

于 2013-02-17T07:34:36.423 回答
0

我建议使用别名,如果您使用不同版本的 Python,这将更容易发生冲突。shell 将查找 PATH 变量,并在它与 Python 的可执行文件匹配的任何地方执行它。别名必须放在您的 shell 配置文件中,例如.bash_profile.

于 2013-02-17T04:28:27.857 回答
0

谢谢大家的解释。

As I already said, I am pretty new to Unix and Linux. I just wrote an article about those things (aliases, symlinks $PATH) for my blog for other "newbies". I like to write about those things, because they really interest me, and I want to share my experiences - I hope they are helpful to other people, too. Furthermore, it helps me to deepen my understanding if I have to explain things - and it is a good future reference, too!

It would be nice if you could skim over the article very quickly, and if I got some things wrong, I would be very happy about suggestions!

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

于 2013-02-18T03:03:58.167 回答