在任何具有.bashrc之类的UNIX系统上添加到PATH

时间:2012-07-20 03:46:23

标签: bash shell unix path zsh

我希望我的应用程序将自己的bin目录添加到路径中,这种方式适用于跨所有UNIX的所有shell(实际上是多个shell)。这可能吗?

具体而言,目标是添加~/.myapp/bin/用户路径的一部分。

简单地将export PATH=~/.myapp/bin:$PATH添加到.bashrc将无效 - zsh用户等等?此外,我不确定这在所有支持shell的平台上是否可靠。

4 个答案:

答案 0 :(得分:3)

我怀疑你问的是不可能的。所有炮弹都没有中心位置。许多Bourne样式的shell(bash,zsh)可能会或可能不会读取~/.profile,具体取决于它们的默认配置,但csh和tcsh读取完全不同的文件集,并且不使用与bash相同的命令来设置变量如PATH

许多应用程序使用的替代策略是将自己安装在某些地方,例如 / usr / local / appname / / opt / appname / 然后在/usr/local/bin/中创建符号链接。例如,在我的FreeBSD系统上:

> cd /usr/local/bin ; ls -l drush mailq perl5
lrwxr-xr-x  1 root  wheel  14 Apr 29 12:22 drush -> ../drush/drush
lrwxr-xr-x  1 root  wheel  32 Apr 28 15:28 mailq -> ../../../usr/local/sbin/sendmail
lrwxr-xr-x  1 root  wheel  25 Apr 17 01:17 perl5 -> /usr/local/bin/perl5.12.4

您可以采取任何措施来利用现有配置而不是要求自定义,这样可以降低失败的可能性。

此外,对于大多数平台而言,有一种“可接受的”处理方式。如果你要在FreeBSD中安装软件,它应该真正通过FreeBSD“ports”系统完成,该系统有自己的文件应该去哪里的规则。与MacPorts,Fink,Emerge等相同。在您执行各种用户社区中的脚趾之前,请阅读目标平台。

答案 1 :(得分:2)

老实说,我会避免这样做。在~/bin中添加符号链接或exec脚本,并通知用户必须将其添加到$PATH(如果它尚未存在)。

答案 2 :(得分:0)

在我的系统上bash和zsh源/etc/profile.env,它是env-update/etc/env.d目录的内容生成的文件。但是在这里添加类似~/smth的路径可能不是一个好主意,这也是特定于分发的(shell使用它的唯一原因是代码

if [ -e /etc/profile.env ] ; then
    . /etc/profile.env
fi

/etc/profile/etc/zsh/zprofile}。

答案 3 :(得分:-1)

在Bash中,变量$PATHbin分隔所有sbin:个文件夹。

通过一点替换,您可以获得它们的列表。以Snow Leopard为例:

$ echo ${PATH//:/ }
/opt/local/bin /opt/local/sbin /sw/bin /sw/sbin /usr/bin /bin /usr/sbin /sbin /usr/local/bin /usr/local/git/bin /usr/X11/bin /usr/X11R6/bin