$ PATH在别名的优势(Advantage of $PATH over alias)

2019-08-17 00:20发布

我是比较新的Linux和Unix。 随着互联网的帮助下,我终于想通了如何$PATH和别名在我.bashrc工作。

可是我真的找不到任何描述时使用的。

比方说,我在图书馆/框架安装Python3.3和可执行是/Library/Frameworks/Python.framework/Versions/3.3/bin/python3 ,但我只想通过键入到执行Python 3.3 python3到我的终端。

当我理解正确的话,有(至少)三种方法来实现这一目标:

1)我修改$ PATH在我的.bashrc:

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

你会说(从你的经验)是“建议”的方式?

Answer 1:

python3在你的路径是调用它的任何地方,你可能会发现自己在你的文件系统的正确方法。 符号链接是更改命令的最佳方式python ,并保持你的脚本不取决于版本(可以运行依赖于蟒蛇脚本中使用的符号链接,并且需要Python 3.0专门使用python3脚本,即使您的计算机上他们是一样的东西)。 符号链接仍然在文件系统中的文件,所以他们仍然需要在您的路径。

我只看到,当你试图建立某种行为是比一个命令行工具,就像一个别名的默认行为不同的使用别名ls ,增加了-a默默。

此外符号链接都存储在文件系统所以一旦产生,他们存在谁登录所有其他用户,而别名仅适用于登录谁定义了他们的用户。 他们也都可以应用这些文件的权限。

这是一个有趣的文章有关的东西,你可以做你的终端通过您.bash_profile包括一些伟大的别名。



Answer 2:

首先,没有理由在安装Python /Library/Frameworks/目录。 我的建议是(至少对于初学者)你不应该添加顶级目录,如你/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是一场噩梦,并减慢你的交互shell



Answer 3:

谢谢大家的解释。

正如我已经说过,我是相当新的Unix和Linux。 我只写了这些事情(别名,符号链接$ PATH)为我的博客的其他“新手”的文章。 我喜欢写那些东西,因为他们真的关心我,我想分享我的经验 - 我希望他们有帮助别人了。 此外,它可以帮助我加深我的理解,如果我要解释的东西 - 这是一个美好的未来参考,太!

这将是很好,如果你可以在文章很快脱脂的,如果我有一些事情错了,我会约建议很开心!

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



Answer 4:

我建议去别名这将使它更容易产生的,如果你的不同版本的Python的冲突。 外壳将查找PATH变量无论在哪里,Python中的可执行文件相匹配,将执行它。 别名必须被放在像你的壳轮廓.bash_profile



文章来源: Advantage of $PATH over alias
标签: linux shell unix