我希望我的应用程序将自己的bin
目录添加到路径中,这种方式适用于跨所有UNIX的所有shell(实际上是多个shell)。这可能吗?
具体而言,目标是添加~/.myapp/bin/
用户路径的一部分。
简单地将export PATH=~/.myapp/bin:$PATH
添加到.bashrc
将无效 - zsh用户等等?此外,我不确定这在所有支持shell的平台上是否可靠。
答案 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中,变量$PATH
为bin
分隔所有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