使用类似.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
可能与原始问题的答案最接近。