1

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

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

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

4

4 回答 4

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 等也是如此。在你做一些在他们的各种用户社区中踩到脚趾的事情之前,请先阅读你的目标平台。

于 2012-07-20T03:59:22.590 回答
2

老实说,我会避免这样做。放入一个符号链接或一个 exec 脚本,~/bin并通知用户$PATH如果它还没有,他们必须添加它。

于 2012-07-20T03:51:48.163 回答
0

在我的系统上 bash 和 zsh source /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

于 2012-07-20T04:35:34.350 回答
-1

在 Bash 中,该变量$PATH为您提供所有由 .分隔的bin和文件夹。sbin:

稍加替换,您就可以获得它们的列表。以雪豹为例:

$ 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
于 2012-07-20T03:59:48.130 回答