添加到任何 UNIX 系统上的 PATH 中,例如 .bashrc



我想让我的应用程序将自己的bin目录添加到路径中,以便跨所有 UNIX 的所有外壳(实际上,多个外壳(工作。这可能吗?

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

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

我怀疑你问的是不可能的。 没有一个中心位置被所有炮弹所尊重。 许多 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等相同。 在你做一些在他们的各种用户社区中踩脚趾的事情之前,先阅读你的目标平台。

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

在我的

系统上,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(。

在 Bash 中,变量 $PATH为您提供所有binsbin文件夹,由 : 分隔。

通过一点点替换,您可以列出它们。以雪豹为例:

$ 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

相关内容

最新更新