使用类似.bashrc的内容添加到任何UNIX系统上的PATH

使用类似.bashrc的内容添加到任何UNIX系统上的PATH,bash,shell,unix,path,zsh,Bash,Shell,Unix,Path,Zsh,我想让我的应用程序将自己的bin目录添加到路径中,这样可以跨所有unix跨所有shell(实际上是多个shell)工作。这可能吗 具体来说,目标是将~/.myapp/bin/添加到用户路径的一部分 只需将export PATH=~/.myapp/bin:$PATH添加到。bashrc将不起作用zsh用户等呢?此外,我不确定这在所有支持shell的平台上是否可靠。老实说,我会避免这样做。在~/bin中放置一个符号链接或一个exec脚本,并通知用户,如果它不在$PATH中,则必须将其添加到其中。老实

我想让我的应用程序将自己的
bin
目录添加到路径中,这样可以跨所有unix跨所有shell(实际上是多个shell)工作。这可能吗

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


只需将
export PATH=~/.myapp/bin:$PATH
添加到
。bashrc
将不起作用zsh用户等呢?此外,我不确定这在所有支持shell的平台上是否可靠。

老实说,我会避免这样做。在
~/bin
中放置一个符号链接或一个exec脚本,并通知用户,如果它不在
$PATH
中,则必须将其添加到其中。

老实说,我不会这样做。将符号链接或exec脚本放入
~/bin
中,并通知用户,如果它不在
$PATH
中,则必须将其添加到
$PATH
中。

我怀疑您的要求是不可能的。没有一个中心位置受到所有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“端口”系统来完成,该系统对文件应该放在哪里有自己的规则。MacPorts、Fink、Emerge等的情况也一样。在你做一些事情之前,先了解一下你的目标平台,了解一下他们的各种用户社区。

我怀疑你的要求是不可能的。没有一个中心位置受到所有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“端口”系统来完成,该系统对文件应该放在哪里有自己的规则。MacPorts、Fink、Emerge等也一样。在你做一些事情之前,先阅读一下你的目标平台,了解它们的各种用户社区。在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

在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

在我的系统上,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
)中,

在我的系统上,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
)中,我想到了这一点,但
~/bin
这件事在某些平台(尤其是Mac)上表现得并不好。另外,我想让安装尽可能做到“一步到位”。不管怎样,OS X的处理方式应该完全不同于其他*NIX,因此最终的问题不会像你想象的那么严重。为什么OS X的处理方式应该“完全不同于其他*NIX”?它已经以OS X用户期望的方式实现了90%的不同。在罗马的时候,按照罗马人的方式去做。我想到了这一点,但是
~/bin
这件事在一些平台(尤其是Mac)上表现得不太好。另外,我想让安装尽可能做到“一步到位”。不管怎样,OS X的处理方式应该完全不同于其他*NIX,因此最终的问题不会像你想象的那么严重。为什么OS X的处理方式应该“完全不同于其他*NIX”?它已经以OS X用户期望的方式实现了90%的不同。在罗马时,按照罗马人的方式去做。同意的意见是,Bourne compatible shells的
.profile
可能与原始问题的答案最接近。同意的意见是,Bourne compatible shells的
.profile
可能与原始问题的答案最接近。